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

时间:2011-03-15 19:46:36

标签: entity-framework frameworks entity

我是实体框架工作代码的新手。 当我做以下事情时,我有一个名为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()”语句之间放置它时效果很好。

这对我来说很奇怪,我真的需要保存每一步吗?他不能在本地副本和数据库上搜索,我认为实体框架中的部分乐趣在于我可以“正常”地与我的班级一起工作,并且不必在每一步都保存我的更改。 我可以让他每走一步都“自动保存”,所以我不必一直写“SaveChanges”

还有一个问题,我之前使用过NHibrnate以及使用简单XML文件进行的所有映射。我在这里看不到任何文件,是映射吗?我可以改变吗?

提前致谢

2 个答案:

答案 0 :(得分:3)

这应该有效:

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();

您的版本不起作用的原因是您在数据库中寻找father实体 - 但是当您致电SaveChanges()

时,您只会将其添加到数据库中

至于映射 - 你的项目应该有一个.edmx文件 - 双击它会调出一个设计师,它也允许你修改映射。

答案 1 :(得分:3)

缺少.edmx,请参阅:

http://blogs.msdn.com/b/adonet/archive/2011/03/07/when-is-code-first-not-code-first.aspx

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

http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-1-introduction-and-model.aspx