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提供对启动时启动的对象上下文的静态引用。由于某种原因,该ctx.AddToPropertyTypes(propType);位不会将实体添加到上下文中。如果我在该行之后设置断点并浏览ctx.PropertyTypes实体集,则它不存在。有任何想法吗?

编辑 1:如果我ctx.SaveChanges()在 and 步骤之后添加 a ,ctx.AddToPropertyTypes(propType)则实际添加似乎仅在 SaveChanges 执行后发生。但是,这不符合我的要求,因为我想在保存之前先验证对象,并想遍历实体集中的实体。有人知道另一种方法吗?

4

1 回答 1

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 == ...);
于 2013-02-26T10:45:06.997 回答