Entity framework 实体框架AddObject未将对象添加到EntitySet
我有下面的代码Entity framework 实体框架AddObject未将对象添加到EntitySet,entity-framework,c#-4.0,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.
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之后发生。但是,这不符合我的要求,因为我希望在保存之前首先验证对象,并希望遍历实体集中的实体。有人知道另一种方法吗?这就是你的问题所在ctx.PropertyTypes
不是一个真正的集合-它是数据库的入口,您的“浏览”实际上是对尚未存储新对象的数据库执行查询。如果要在不保存的情况下查找添加到上下文中的新对象,必须在ObjectStateManager
中搜索该对象:
var entity = ctx.ObjectStateManager
.GetObjectStateEntries(EntityState.Added)
.Where(e => !e.IsRelationship)
.Select(e => e.Entity)
.OfType<PropertyType>()
.SingleOrDefault(p => p.ID == ...);
var entity=ctx.ObjectStateManager
.GetObjectStateEntries(EntityState.Add)
.其中(e=>!e.IsRelationship)
.选择(e=>e.Entity)
第()类
.SingleOrDefault(p=>p.ID==…);
在何处调用保存更改
?仅在执行一些验证之后。请参见上面的编辑1谢谢!我想我现在更了解EF了。您还向我展示了一种获取所有新添加实体列表的方法,这非常有用。