【问题标题】:Entity framework code first, some advice needed首先是实体框架代码,需要一些建议
【发布时间】:2011-03-15 19:46:36
【问题描述】:

我首先是实体框架工作代码的新手。 当我执行以下操作时,我有一个名为 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" });

我遇到了一个例外,因为他找不到“小猫爸爸”,但是当我在 to 语句之间放置“SaveChanges()”时,它可以完美运行。

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

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

提前致谢

【问题讨论】:

    标签: entity-framework frameworks entity


    【解决方案1】:

    关于缺少 .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 进行映射。请参阅实体框架博客上 12 部分系列的前两篇文章:

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

    【讨论】:

      【解决方案2】:

      这应该可行:

      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 文件 - 双击它会弹出一个设计器,它还允许您修改映射。

      【讨论】:

      • 但是如果我想在一个事务中进行插入,我不希望他先救父亲再救儿子,想把他们一起救。
      • @OopsUser:它们加在一起 ​​- 当您调用 SaveChanges() 时,更改仅提交到数据库(在事务中),直到那时它们只存在于内存中在您的上下文对象中。
      • 另一件事是我的项目不包含任何 edmx 文件。我还在解决方案资源管理器中单击了“显示所有文件”,但仍然没有找到任何 edmx 文件。
      猜你喜欢
      • 1970-01-01
      • 2011-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多