代码之家  ›  专栏  ›  技术社区  ›  Pure.Krome

尝试用实体框架v4保存对象-如何保存?

  •  1
  • Pure.Krome  · 技术社区  · 15 年前

    我用过 Entity Framework v4 (与VS2010 Beta 2一起提供)+ POCO 我可以完美地将数据库中的数据加载到POCO中。

    现在,我有一个POCO实例,我不知道如何使用EF4将它保存到数据库中。有人能帮忙吗?我猜是因为EF4不知道POCO已经改变了?不管怎样,这是我试过的代码,它不起作用。(它向数据库中插入数据,但不使用标识值更新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重复这个概念吗?

    干杯:)

    2 回复  |  直到 15 年前
        1
  •  1
  •   Craig Stuntz    15 年前

    在英孚,你需要使用 Attach 对于现有(更新)对象,而不是 AddObject 用于新(插入)对象。除此之外,它还应该起作用。

        2
  •  1
  •   devlife    15 年前

    您确定状态已更改吗?
    您可能需要签出Context.DetectChanges()。

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