2013-02-26 68 views
0

,我有以下的代码实体框架ADDOBJECT不添加对象的EntitySet

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.AddToPropertyTypes(propType)后添加ctx.SaveChanges()和步骤实际添加只出现一次的SaveChanges执行的情况发生。但是这不符合我的要求,因为我希望在保存之前首先验证对象,并且想要遍历实体集中的实体。有没有人知道另一种方法?

+0

你在哪里调用'SaveChanges'? – 2013-02-26 10:31:53

+0

后来才做了一些验证。请参阅上面的编辑1 – Renier 2013-02-26 10:41:23

回答

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 == ...); 
+0

谢谢!我觉得我现在对EF有了更好的理解。您还向我展示了一种获取所有新增实体的列表的方法,这对您有所帮助。 – Renier 2013-02-26 10:53:49