我有以下代码
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时发生。然而,这不符合我的要求,因为我想在保存之前首先验证对象并希望迭代实体集中的实体。有没有人知道另一种方法?
答案 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 == ...);