我从有关 BeforeSaveEntities 的 Breeze 文档中阅读了以下内容:
“可以在此方法返回的地图中添加或删除实体”。
所以我想我可以向 saveMap 添加一个新的 EntityInfo 实例。我的问题是:我该怎么做?在任何地方都有这样的例子吗?
我可以完美地循环浏览字典。但是由于 EntityInfo 没有构造函数,并且它的所有字段都是 get only,所以我觉得有点卡在这里。欢迎任何帮助。
谢谢
我从有关 BeforeSaveEntities 的 Breeze 文档中阅读了以下内容:
“可以在此方法返回的地图中添加或删除实体”。
所以我想我可以向 saveMap 添加一个新的 EntityInfo 实例。我的问题是:我该怎么做?在任何地方都有这样的例子吗?
我可以完美地循环浏览字典。但是由于 EntityInfo 没有构造函数,并且它的所有字段都是 get only,所以我觉得有点卡在这里。欢迎任何帮助。
谢谢
好的,这是一个非常人为的BeforeSaveEntities覆盖示例,它在通常保存的内容旁边创建评论记录。评论记录包括基于SaveOptions.Tag属性值生成的评论。
protected override Dictionary<Type, List<EntityInfo>> BeforeSaveEntities(Dictionary<Type, List<EntityInfo>> saveMap) {
var comment = new Comment();
var tag = ContextProvider.SaveOptions.Tag;
comment.Comment1 = (tag == null) ? "Generic comment" : tag.ToString();
comment.CreatedOn = DateTime.Now;
comment.SeqNum = 1;
var ei = ContextProvider.CreateEntityInfo(comment);
List<EntityInfo> comments;
if (!saveMap.TryGetValue(typeof(Comment), out comments)) {
comments = new List<EntityInfo>();
saveMap.Add(typeof(Comment), comments);
}
comments.Add(ei);
return saveMap;
}
}
此答案适用于那些选择使用 objectContext 而不是 Code First 来使用 Database First 的开发人员,以及 Nicolas。
我在 Debug 中使用 Breeze Source Code 后发现方法的第 805 行GetEntitySetName
( cspaceEntityType = cspaceEntityTypes.First(et => et.FullName == entityType.FullName
)
我会收到错误“序列不包含匹配元素”
我注意到我的手表内部et.FullName
并entityType.FullName
没有相同的命名空间。这告诉我和我的同志 edmx 模型名称空间与对象上下文不同。
转到您的 edmx 模型,在空白处右键单击并选择属性。确保命名空间属性与您的对象上下文相同。