此问题在我升级到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
succeeded
回调后缓存中的内容到了。
问题 为什么Breeze会复制这个实体,虽然它不应该被允许?
修改
我又回到了Breeze 1.4.8,问题就消失了。以下是保存操作后manager
包含的内容:
答案 0 :(得分:1)
这是一个错误,现在已修复并可在GitHub上使用。它将在接下来的几天内发布完整的拉链。任何高于1.4.9的版本都应该包含修复程序。
抱歉,我无法从屏幕截图中看出任何内容都是重复的。您是否在EntityManager缓存中看到两个具有相同密钥的实体,如果是这样的话?您是否也在数据库中看到某种形式的重复?
或者是在保存后在客户端上创建“新”实体的问题吗?
这些密钥的一部分是否可能是数据库中的标识列?如果是这样,那么值得检查元数据以确保此EntityType的autoGeneratedKeyType属性设置为 Identity 。这将导致数据库在插入时生成新密钥,然后该实体将被发送回客户端。仅当AutoGeneratedKeyType设置为 Identity 时,才会将此实体与其先前的版本合并。否则,您将使用旧密钥和克隆版本的新密钥结束。
否则,我认为我们需要更多信息。