实体框架AddObject未将Object添加到EntitySet

时间:2013-02-26 10:09:42

标签: entity-framework c#-4.0

我有以下代码

private void DoAddPropertyType()
{
    var ctx = Globals.DbContext;
    var propType = new PropertyType()
    {
        ID = Guid.NewGuid(),
        Name = "NewType",
        Description = "New Property Type",
        ModifiedDate = DateTime.Now
    };
    ctx.AddToPropertyTypes(propType);
    PropertyTypes.Add(propType);
}

Globals.DbContext提供对启动时启动的objectcontext的静态引用。由于某种原因,ctx.AddToPropertyTypes(propType);位不会将实体添加到上下文中。如果我在该行之后断点并浏览ctx.PropertyTypes实体集,那么它就不存在了。有什么想法吗?

编辑1: 如果我在ctx.SaveChanges()和步骤之后添加ctx.AddToPropertyTypes(propType),则实际添加似乎只会在执行SaveChanges时发生。然而,这不符合我的要求,因为我想在保存之前首先验证对象并希望迭代实体集中的实体。有没有人知道另一种方法?

1 个答案:

答案 0 :(得分:1)

这就是你的问题所在。 ctx.PropertyTypes不是真正的集合 - 它是数据库的入口,您的“浏览”实际上是对尚未存储新对象的数据库执行查询。如果要查找添加到上下文中的新对象而不先保存它,则必须在ObjectStateManager内搜索对象:

var entity = ctx.ObjectStateManager
                .GetObjectStateEntries(EntityState.Added)
                .Where(e => !e.IsRelationship)
                .Select(e => e.Entity)
                .OfType<PropertyType>()
                .SingleOrDefault(p => p.ID == ...);