Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架与主键的多对多关系_Entity Framework_Entity Framework 6 - Fatal编程技术网

Entity framework 实体框架与主键的多对多关系

Entity framework 实体框架与主键的多对多关系,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,我有以下模式: 用户表:(主键) 用户ID 客户ID 角色表:(主键) 用户ID 客户ID 用户角色表: UserRoleId(UNIQUEIDENTIFIER(newsequentialid))主键 用户ID 客户ID 罗莱德 这些表参与多对多关系(UserRole)。我首先使用实体框架代码和映射类来定义数据库表。因此,在我的User表映射类中,我有以下内容: this.HasMany(u => u.Roles) .WithMany() .Map(m =>

我有以下模式:

用户表:(主键)
  • 用户ID
  • 客户ID
  • 角色表:(主键)
  • 用户ID
  • 客户ID
  • 用户角色表:
  • UserRoleId(UNIQUEIDENTIFIER(newsequentialid))主键
  • 用户ID
  • 客户ID
  • 罗莱德
  • 这些表参与多对多关系(UserRole)。我首先使用实体框架代码和映射类来定义数据库表。因此,在我的User表映射类中,我有以下内容:

     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”

    可以先告诉代码我的“UserRole”的主键是UserRoleId吗

    问题是,当实体框架尝试创建UserRole表时,它将使用MapLeftKey和MapRightKey的所有列创建具有所有这些列的PrimaryKey的UserRole


    有什么建议吗?

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


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

    请查看我的答案,这是一个非常简单的解决方案。没有办法,只能为这些创建模型和映射器。问题只是因为EF无法处理MapLeftColumns和MapRig的通用列名htColumns。