Entity framework 实体框架代码首先,需要一些建议

Entity framework 实体框架代码首先,需要一些建议,entity-framework,frameworks,entity,Entity Framework,Frameworks,Entity,我是第一个接触实体框架代码的人。 我有一个名为Cat的简单类和一个Cat列表,当我执行以下操作时: mAllAnimals.Add(new Cat() { Father = null , Name = "Father Kitten", NickName = "Shmil" }); mAllAnimals.Add(new Cat() { Father = mAllAnimals.First(a => a.Name == "Father Kitten") , Name = "Son Kitte

我是第一个接触实体框架代码的人。 我有一个名为Cat的简单类和一个Cat列表,当我执行以下操作时:

mAllAnimals.Add(new Cat() { Father = null , Name = "Father Kitten", NickName = "Shmil" });
mAllAnimals.Add(new Cat() { Father = mAllAnimals.First(a => a.Name == "Father Kitten") , Name = "Son Kitten" , NickName = "son" });
我有一个例外,因为他找不到小猫爸爸,但当我在两个语句之间切换到SaveChanges时,效果非常好

这对我来说很奇怪,我真的需要保留每一步吗?他不能在本地副本和数据库上搜索吗?我认为实体框架的一部分乐趣在于我可以正常使用我的类,而不必每一步都保存我的更改。 我可以让他自动保存我做的每一步,这样我就不必写所有的时间保存更改了吗

还有一个问题,我以前使用过NHibrnate和所有使用简单XML文件制作的映射。我在这里没有看到任何文件,是映射吗?我能换一下吗

提前感谢

这应该可以:

Cat father = new Cat() { Father = null , Name = "Father Kitten", NickName = "Shmil" };
Cat son = new Cat() { Father = father , Name = "Son Kitten" , NickName = "son" };

mAllAnimals.Add(father);
mAllAnimals.Add(son);
context.SaveChanges();
您的版本不起作用的原因是您正在数据库中查找父实体,但只有在调用SaveChanges时才会将其添加到数据库中

至于映射-您的项目应该有一个.edmx文件-双击将打开一个设计器,该设计器还允许您修改映射。

这应该可以:

Cat father = new Cat() { Father = null , Name = "Father Kitten", NickName = "Shmil" };
Cat son = new Cat() { Father = father , Name = "Son Kitten" , NickName = "son" };

mAllAnimals.Add(father);
mAllAnimals.Add(son);
context.SaveChanges();
您的版本不起作用的原因是您正在数据库中查找父实体,但只有在调用SaveChanges时才会将其添加到数据库中


至于映射-您的项目应该有一个.edmx文件-双击将打开一个设计器,该设计器还允许您修改映射。

关于缺少.edmx的问题,请参阅:

Code First不使用.edmx文件,因此也被称为Code。您可以使用属性或fluent API进行映射。请参阅Entity Framework博客上12篇系列文章的前两篇:


关于缺少.edmx,请参见:

Code First不使用.edmx文件,因此也被称为Code。您可以使用属性或fluent API进行映射。请参阅Entity Framework博客上12篇系列文章的前两篇:


但是如果我想在一个事务中进行插入,我不希望他先保存父事务,然后再保存子事务,而是希望将它们一起保存。@OopsUser:它们被添加在一起-当您调用SaveChanges时,更改仅提交给事务中的DB,在此之前,它们只存在于上下文对象的内存中。另一件事是,我的项目不包含任何edmx文件。我还单击了“解决方案资源管理器”中的“显示所有文件”,但仍然没有找到任何edmx文件。但是,如果我想在一个事务中插入,我不希望他先保存父亲,然后保存儿子,希望将它们保存在一起。@OopsUser:它们被添加在一起-在调用SaveChanges时,这些更改仅提交给事务中的DB,直到那时它们才存在于上下文对象中的内存中。另一件事是,我的项目不包含任何edmx文件。我还单击了“解决方案资源管理器”中的“显示所有文件”,但仍然没有找到任何edmx文件。