尝试使用Entity Framework v4保存对象 - 如何?

时间:2009-12-08 23:11:02

标签: .net entity-framework poco

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

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

(基于好的olewind 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. 保存对象。
  4. 那么,我可以用EF4重复这个概念吗?

    欢呼:)

2 个答案:

答案 0 :(得分:1)

你确定状态已经改变吗?
您可能想要查看Context.DetectChanges()

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

答案 1 :(得分:1)

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