【问题标题】:Trying to save an object with the Entity Framework v4 - how?尝试使用 Entity Framework v4 保存对象 - 怎么做?
【发布时间】:2010-12-24 15:22:06
【问题描述】:

我使用的是Entity Framework v4(VS2010 Beta 2 附带的)+POCO。我可以完美地将数据库中的数据加载到 poco 中。

现在,我有一个 poco 实例,但我不知道如何使用 EF4 将其保存到数据库中。有人可以帮忙吗?我猜这是因为 EF4 不知道 POCO 已经“改变”了?无论如何,这是我正在尝试的代码,但它不起作用。 (它会插入数据库,但不会使用 Identity 值更新 POCO。)

(基于良好的 ole Northwind 数据库...)

public void Save(Category category)
{
    // Error handling ommited...

    bool isInsert = category.CategoryId <= 0;

    // Note: Category is a POCO, not an entity object.
    Category newCategory = isInsert
        ? new Category()
        : ((from l in Context.Categories
            .WithCategoryId(category.CategoryId)
            select l).SingleOrDefault() ?? new Category());

    // Left 2 Right.
    newCategory.Name = category.Name;
    // continue setting the properties.

    // Context is a private property, representing the EF context.
    Context.LogEntries.AddObject(newLogEntry);
    Context.SaveChanges();
}

此代码基于我对 Linq-To-Sql 所做的工作(效果很好!) 一般的逻辑流程是:-

  1. 获取现有对象。如果不存在,则创建一个新的。
  2. 设置此现有或新对象的所有属性。这会更新对象的状态。如果有任何更改,则该对象现在已被修改。否则就是新的。
  3. 保存对象。

那么,我可以用 EF4 重复这个概念吗?

干杯:)

【问题讨论】:

    标签: .net entity-framework poco


    【解决方案1】:

    在 EF 中,您需要将 Attach 用于现有(更新)对象,而不是 AddObject 用于新(插入)对象。除此之外,它应该可以工作。

    【讨论】:

    • 是的。哈!我不知道它这么简单:) 现在我正在使用工作单元模式,它实际上真的很棒:)
    【解决方案2】:

    您确定状态已更改吗?
    您可能想查看 Context.DetectChanges()

    http://msdn.microsoft.com/en-us/library/dd456854(VS.100).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2020-07-14
      • 2015-04-30
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多