实体框架与主键有很多很多关系

时间:2014-11-14 14:29:05

标签: entity-framework entity-framework-6

我有以下架构:

用户表:(主键)

  1. 用户ID
  2. CustomerId
  3. 角色表:(主键)

    1. UserId
    2. CustomerId
    3. UserRole表:

      1. UserRoleId(UNIQUEIDENTIFIER(newsequentialid))主键
      2. 用户ID
      3. CUSTOMERID
      4. RoleId
      5. 这些表参与多对多关系(UserRole)。我首先使用实体​​框架代码与映射类来定义数据库表。所以,在我的User Table的映射类中,我有以下内容:

         this.HasMany(u => u.Roles)
              .WithMany()
              .Map(m =>
                {
                  m.MapLeftKey(new string[] { "CustomerID", "UserID" });
                  m.MapRightKey(new string[] {"CustomerID", "RoleID"});
                  m.ToTable("UserRoles");
                }
              );
        

        实体框架因此消息失败: "在模型生成期间检测到一个或多个验证错误: CustomerID:Name:类型中的每个属性名称必须是唯一的。物业名称' CustomerID'已定义。 UserRole:EntityType:EntitySet' UserRole'基于类型' UserRole'没有定义键。

        是否可以告诉Code First我的" UserRole"的主键。是UserRoleId?

        问题是当Entity Framework尝试创建UserRole表时,它会使用MapLeftKey和MapRightKey的所有列来创建具有所有这些列的PrimaryKey的UserRole。

        有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您需要为类似于数据库的类建模,为什么不简单地添加关联表?我嘲笑你的数据库,只要你对所有表进行建模就没有问题。

自己测试,首先使用现有数据库中的代码创建一个EF项目.edmx,我认为答案很明显。