我刚刚开始使用EF6。在过去插入一个对象,这是一个像这个假例子的代码(我正在编写医疗软件,因此,生命体征):
using (DatabaseThingy ObjectContext = new DatabaseThingy(Connection))
{
vitals pcrVital = vitals.Createvital(0, pcrEntity.idPcr, timeTaken, pulse);
ObjectContext.vitals.AddObject(pcrVital);
ObjectContext.SaveChanges();
return pcrVital;
}
现在我读到的所有内容都告诉我这样做:
using (DatabaseThingy ObjectContext = new DatabaseThingy(Connection))
{
vitals pcrVital = new vitals(){
idVitals = 0,
idPcr = pcrEntity.idPcr,
timeTaken = timeTaken,
pulse = pulse
};
ObjectContext.vitals.Add(pcrVital);
ObjectContext.SaveChanges();
return pcrVital;
}
使用EF6时,第一种方法不存在。第一种方法的好处是,如果EDMX是从现有数据库生成的,它将自动创建具有最小(非可空)列(编辑)的构造函数。检查数据库以查看哪些是必需的,但将列表自动放入构造函数中是非常好的。
有没有人知道这背后的原因,或者我是否只是找不到它搬到哪里?
答案 0 :(得分:1)
在EF4中,与使用 DbContext 的EF6相比,使用了 ObjectContext 。生成后面代码的T4模板在这些版本之间是不同的,而早期的默认构造函数不再可用。
在EF6中创建的POCO类比EF4中存在的更轻,更清洁。我担心你必须亲自去做。
您仍然可以使用以下代码和访问方法(如AddObject)访问EF6中的ObjectContext。
(dbContext as IObjectContextAdapter).ObjectContext
但是你不必再这样做了。使用DbContext中提供的DbSet进行Add操作是一种更好的方法。
注意:有些T4模板可以为您提供EF6的早期类结构,但可能不推荐使用。