Breeze BeforeSaveEntities:如何修改savemap

Breeze BeforeSaveEntities:如何修改savemap,breeze,Breeze,我读了以下内容: “可以从该方法返回的映射中添加或删除实体” 因此,我想我可以将EntityInfo的一个新实例添加到saveMap中。 我的问题是:我该怎么做?任何地方都有这样的例子吗 我能完整地翻查字典。但由于EntityInfo没有构造函数,而且它的所有字段都是get only,所以我觉得这里有点卡住了。欢迎任何帮助 谢谢好的,下面是一个精心设计的BeforeSaveEntities覆盖示例,它在正常保存的内容旁边创建注释记录。注释记录包括基于SaveOptions.Tag属性值生成的注释

我读了以下内容:

“可以从该方法返回的映射中添加或删除实体”

因此,我想我可以将EntityInfo的一个新实例添加到saveMap中。 我的问题是:我该怎么做?任何地方都有这样的例子吗

我能完整地翻查字典。但由于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;
  }
受保护的覆盖字典BeforeSaveEntities(字典保存映射){
var comment=新注释();
var tag=ContextProvider.SaveOptions.tag;
comment.Comment1=(tag==null)?“泛型注释”:tag.ToString();
comment.CreatedOn=DateTime.Now;
comment.SeqNum=1;
var ei=ContextProvider.CreateEntityInfo(注释);
列出评论;
if(!saveMap.TryGetValue(typeof(Comment),out comments)){
注释=新列表();
saveMap.Add(typeof(Comment),comments);
}
添加(ei);
返回saveMap;
}

}

好的,下面是一个精心设计的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;
  }
受保护的覆盖字典BeforeSaveEntities(字典保存映射){
var comment=新注释();
var tag=ContextProvider.SaveOptions.tag;
comment.Comment1=(tag==null)?“泛型注释”:tag.ToString();
comment.CreatedOn=DateTime.Now;
comment.SeqNum=1;
var ei=ContextProvider.CreateEntityInfo(注释);
列出评论;
if(!saveMap.TryGetValue(typeof(Comment),out comments)){
注释=新列表();
saveMap.Add(typeof(Comment),comments);
}
添加(ei);
返回saveMap;
}

}

这个答案适用于那些选择先使用objectContext而不是先使用代码来使用数据库的开发人员,以及Nicolas

在调试中使用Breeze源代码后,我发现GetEntitySetName方法的第805行(cspaceEntityType=cspaceEntityTypes.First(et=>et.FullName==entityType.FullName

我将得到错误“序列不包含匹配元素”

我在手表内注意到
et.FullName
entityType.FullName
没有相同的名称空间。这告诉我和我的comrad,edmx模型名称空间与对象上下文不同

转到edmx模型,在空白处单击鼠标右键,然后选择“属性”。确保命名空间属性与对象上下文相同


这个答案适用于那些选择先使用objectContext而不是先使用代码来使用数据库的开发人员,以及Nicolas

在调试中使用Breeze源代码后,我发现GetEntitySetName方法的第805行(cspaceEntityType=cspaceEntityTypes.First(et=>et.FullName==entityType.FullName

我将得到错误“序列不包含匹配元素”

我在手表内注意到
et.FullName
entityType.FullName
没有相同的名称空间。这告诉我和我的comrad,edmx模型名称空间与对象上下文不同

转到edmx模型,在空白处单击鼠标右键,然后选择“属性”。确保命名空间属性与对象上下文相同


为什么不将新对象添加到您的DbContext?我现在正在这样做。但是,当然,在Breeze控制器中调用SaveChanges会返回一个SaveResult,其中包含0个实体。因此,我想知道是否确实可以按照文档中的建议向saveMap添加一些内容。为什么不将新对象添加到你的DbContext?我现在正在做。但是,当然,在Breeze控制器中调用SaveChanges会返回一个包含0个实体的SaveResult。因此,我想知道是否真的可以按照文档中的建议向saveMap添加一些内容。谢谢!var ei=ContextProvider.CreateEntityInfo(comment);就是这样再次感谢您,这里仍然有一个问题。我成功地将内容添加到saveMap,并用另一种类型的列表替换其中的列表,并使用转换后的元素。我遇到了以下异常:“序列不包含匹配的元素”。我在EFContextProvider.cs中跟踪到GetEntitySetName,变量为ospaceEntityType=ospaceEntityTypes.First(oet=>oet.FullName==entityType.FullName);不知道为什么会发生这种情况。非常感谢您的帮助。Nicolas,您能提供一个小的解决方案来演示问题吗?这样我们可以准确地检查发生了什么。谢谢。顺便说一下,请将复制解决方案发送给breeze@ideablade.comThanks但是我想我刚刚发现我做错了什么。我创建了一个DTODbContext用于元数据,另一个用于数据。我正在将一个实体从DTO类型转换为类型,并将其放入saveMap中。这可能是这里的问题吗?谢谢!var ei=ContextProvider.CreateEntityInfo(comment);就是这样!:)再次感谢,这里仍然有问题。我成功地将内容添加到saveMap中,并用转换后的元素替换其中的列表,替换为另一种类型的列表。我遇到了以下异常:“序列不包含匹配元素”。我在EFContextProvider.cs中跟踪到GetEntitySetName,变量ospaceEntityType=ospaceEntityTypes.First(oet=>oet.FullName==entityType.FullName);不知道为什么会这样。非常感谢你的帮助。尼古拉斯,你能提供一个小的帮助吗