升级到 Breeze 1.4.9 后,这个问题开始出现。
我有以下实体:
public class ProjectMember
{
public int ProjectId { get; set; }
[ForeignKey("ProjectId")]
[InverseProperty("ProjectMembers")]
public Project Project { get; set; }
public int TeamMemberId { get; set; }
[ForeignKey("TeamMemberId")]
[InverseProperty("ProjectMembers")]
public TeamMember TeamMember { get; set; }
}
及其配置:
public class ProjectMemberConfiguration : EntityTypeConfiguration<ProjectMember>
{
public ProjectMemberConfiguration()
{
HasKey(a => new { a.ProjectId, a.TeamMemberId });
// ProjectMember has 1 project, projects have many projectmember records
HasRequired(a => a.Project)
.WithMany(s => s.ProjectMembers)
.HasForeignKey(a => a.ProjectId)
.WillCascadeOnDelete(true);
}
}
元数据看起来:
我使用以下内容在客户端创建此实体:
manager.createEntity('ProjectMember', { projectId: projectId, teamMemberId: teamMemberId });
到目前为止一切都很好,但是当这个实体被保存回服务器时,它会在客户端重复,如下所示(下面的屏幕截图显示了 saveChanges
之后缓存中的内容 成功
回调已到达。
问题 尽管不应该允许,但 Breeze 为什么要复制这个实体?
编辑
我恢复到 Breeze 1.4.8,问题就消失了。以下是保存操作后 manager
包含的内容:
最佳答案
2014 年 3 月 7 日更新
这是一个错误,现已修复并可在 GitHub 上找到。它将在接下来的几天内以完整的 zip 形式发布。 1.4.9 以上的任何版本都应包含修复程序。
原帖
抱歉,我无法从屏幕截图中看出有任何重复的内容。您是否在 EntityManager 缓存中看到两个实体具有相同的键,如果是,怎么办?您是否也在数据库上看到某种形式的重复?
或者是保存后在客户端上创建"new"实体的问题?
这些键的一部分是否可能是数据库上的标识列?如果是这样,则值得检查元数据以确保此 EntityType 的 autoGenerateKeyType 属性设置为 Identity。这将导致数据库在插入时生成一个新键,然后该实体将被发送回客户端。仅当 AutoGenerateKeyType 设置为 Identity 时,才会将此实体与其先前实体合并。否则,您最终将得到带有旧 key 的原始实体和带有新 key 的克隆版本。
否则,我认为我们需要更多信息。
关于c# - New Breeze 1.4.9 - 重复的实体 - 可能的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22248585/