尝试使用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="Data Source=SEBASTIAAN-PC'SQLEXPRESS;Initial Catalog=PocoTest;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True"" 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时,连接没有建立。现在我猜我使用连接字符串的方式有问题。我从另一个项目中借鉴了这种方法,在这个项目中我确实使用了生成的存储库。
任何帮助都将非常感激!
没有在构造函数中建立连接。需要时建立,不需要时关闭。
我已经提出了解决方案,edmx文件持有对'PersonSet'的引用,我手动将其更改为'Person'。现在我得到了预期的结果。