1

我从有关 BeforeSaveEntities 的 Breeze 文档中阅读了以下内容:

“可以在此方法返回的地图中添加或删除实体”。

所以我想我可以向 saveMap 添加一个新的 EntityInfo 实例。我的问题是:我该怎么做?在任何地方都有这样的例子吗?

我可以完美地循环浏览字典。但是由于 EntityInfo 没有构造函数,并且它的所有字段都是 get only,所以我觉得有点卡在这里。欢迎任何帮助。

谢谢

4

2 回答 2

5

好的,这是一个非常人为的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;
  }

}

于 2013-06-18T14:55:29.523 回答
1

此答案适用于那些选择使用 objectContext 而不是 Code First 来使用 Database First 的开发人员,以及 Nicolas。

我在 Debug 中使用 Breeze Source Code 后发现方法的第 805 行GetEntitySetName( cspaceEntityType = cspaceEntityTypes.First(et => et.FullName == entityType.FullName)

我会收到错误“序列不包含匹配元素”

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

转到您的 edmx 模型,在空白处右键单击并选择属性。确保命名空间属性与您的对象上下文相同。

截屏

于 2013-08-01T18:08:46.957 回答