我是实体框架工作代码的新手。 当我做以下事情时,我有一个名为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文件进行的所有映射。我在这里看不到任何文件,是映射吗?我可以改变吗?
提前致谢
答案 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部分系列的前两篇文章: