尝试使用ObjectContext连接到数据库,但失败

本文关键字:数据库 失败 连接 ObjectContext | 更新日期: 2023-09-27 18:04:21

我正在EF中玩POCOs,从一个很小的基本设置到更高级的东西。没有泛型接口,只是一个简单的入口点。首先,我创建了一个.edmx文件,其中只包含一个实体:Person,它有3个属性。Id, FirstName和LastName。

这样,我生成了数据库,并手动添加了一些记录。这个数据库被称为'PocoTest',我的App.Config中的连接位看起来像:

<add name="PocoTestContainer" connectionString="metadata=res://*/PocoTest.csdl|res://*/PocoTest.ssdl|res://*/PocoTest.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=SEBASTIAAN-PC'SQLEXPRESS;Initial Catalog=PocoTest;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

首先我创建了一个实体:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

现在我创建了一个Context,继承了ObjectContext:

public class PocoTestContext : ObjectContext
{
    private IObjectSet<Person> persons;
    public PocoTestContext()
        : base("name=PocoTestContainer", "PocoTestContainer")
    {
        ContextOptions.LazyLoadingEnabled = true;
        persons = CreateObjectSet<Person>();           
    }
    public IObjectSet<Person> Persons
    {
        get
        {
            return persons;
        }
    }
}

这里没什么特别的。下一个是存储库:

public class PersonRepository
{
    PocoTestContext context;
    public PersonRepository()
    {
        context = new PocoTestContext();
    }
    public Person GetById(int id)
    {
        return context.Persons.Where(p => p.Id == id).FirstOrDefault();
    }
    public List<Person> GetAll()
    {
        List<Person> persons = null;
        try
        {
            persons = context.Persons.ToList();
        }
        catch(Exception e)
        {
            Console.WriteLine(e.InnerException);
        }
        return persons;
    }
    public void Add(Person entity)
    {
        context.Persons.AddObject(entity);
    }
    public void Save()
    {
        context.SaveChanges();
    }
}

现在所有这些编译好,但我似乎无法连接到数据库,因为我没有得到任何结果返回。当我检查PocoTestContext构造函数中的connectionstate时,连接没有建立。现在我猜我使用连接字符串的方式有问题。我从另一个项目中借鉴了这种方法,在这个项目中我确实使用了生成的存储库。

任何帮助都将非常感激!

尝试使用ObjectContext连接到数据库,但失败

没有在构造函数中建立连接。需要时建立,不需要时关闭。

我已经提出了解决方案,edmx文件持有对'PersonSet'的引用,我手动将其更改为'Person'。现在我得到了预期的结果。