New Breeze 1.4.9 - 重复实体 - 可能的错误?

时间:2014-03-07 11:15:00

标签: c# javascript breeze

此问题在我升级到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);
    }
}

元数据显示:

enter image description here

我在客户端创建了这个实体,其中包含以下内容:

manager.createEntity('ProjectMember', { projectId: projectId, teamMemberId: teamMemberId });

到目前为止一切都很好,但是当这个实体被保存回服务器时,它会在客户端被复制,如图所示(下面的屏幕截图显示了saveChanges succeeded回调后缓存中的内容到了。

enter image description here

问题 为什么Breeze会复制这个实体,虽然它不应该被允许?

修改

我又回到了Breeze 1.4.8,问题就消失了。以下是保存操作后manager包含的内容: enter image description here

1 个答案:

答案 0 :(得分:1)

2014年3月7日更新

这是一个错误,现在已修复并可在GitHub上使用。它将在接下来的几天内发布完整的拉链。任何高于1.4.9的版本都应该包含修复程序。

原帖

抱歉,我无法从屏幕截图中看出任何内容都是重复的。您是否在EntityManager缓存中看到两个具有相同密钥的实体,如果是这样的话?您是否也在数据库中看到某种形式的重复?

或者是在保存后在客户端上创建“新”实体的问题吗?

这些密钥的一部分是否可能是数据库中的标识列?如果是这样,那么值得检查元数据以确保此EntityType的autoGeneratedKeyType属性设置为 Identity 。这将导致数据库在插入时生成新密钥,然后该实体将被发送回客户端。仅当AutoGeneratedKeyType设置为 Identity 时,才会将此实体与其先前的版本合并。否则,您将使用旧密钥和克隆版本的新密钥结束。

否则,我认为我们需要更多信息。