插入EF4 / 6之间的方法差异

时间:2015-04-14 21:15:47

标签: c# entity-framework entity-framework-6 ef-database-first

我刚刚开始使用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是从现有数据库生成的,它将自动创建具有最小(非可空)列(编辑)的构造函数。检查数据库以查看哪些是必需的,但将列表自动放入构造函数中是非常好的。

有没有人知道这背后的原因,或者我是否只是找不到它搬到哪里?

1 个答案:

答案 0 :(得分:1)

在EF4中,与使用 DbContext 的EF6相比,使用了 ObjectContext 。生成后面代码的T4模板在这些版本之间是不同的,而早期的默认构造函数不再可用

在EF6中创建的POCO类比EF4中存在的更轻,更清洁。我担心你必须亲自去做。

您仍然可以使用以下代码和访问方法(如AddObject)访问EF6中的ObjectContext。

(dbContext as IObjectContextAdapter).ObjectContext

但是你不必再这样做了。使用DbContext中提供的DbSet进行Add操作是一种更好的方法。

注意:有些T4模板可以为您提供EF6的早期类结构,但可能不推荐使用。

EF6 Entity Object Generator