MVC4代码优先的方法,如何修复以下问题



我得到以下错误在模型生成过程中检测到一个或多个验证错误:

\tSystem.Data.Entity.Edm.EdmAssociationEnd::多重性在关系"UserRoles_Roles"中的角色"UserRoles_Roles_Source"中无效。由于Dependent Role引用了键属性,因此Dependent Role的多重性的上限必须为"1"。

我的实体和相关联的映射定义如下,

public class UserProfile
    {
        public UserProfile()
        {
           UserUserRoles = new List<UserRoles>();       
        }         
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int UserId { get; set; }
        public string UserName { get; set; }      
        public virtual ICollection<UserRoles> UserUserRoles { get; set; } 
    }
 public class Roles
    {
        public Roles()
        {
            RoleUserRoles = new List<UserRoles>();
        }
        public int RoleId { get; set; }
        public string RoleName { get; set; }

        public virtual ICollection<UserRoles> RoleUserRoles { get; set; }
    }
  public class UserRoles
    {
        public int UserId { get; set; }
        public int RoleId { get; set; }

        public virtual UserProfile User { get; set; }
        public virtual Roles Roles { get; set; }
    }
//Mappings
  public UserProfileMap()
        {
            // Primary Key
            HasKey(t => t.UserId);
            // Properties
            Property(t => t.UserName)
                .HasMaxLength(56);     
            // Table & Column Mappings
            ToTable("UserProfile");
            Property(t => t.UserId).HasColumnName("UserId");
            Property(t => t.UserName).HasColumnName("UserName");
        }
public class RolesMap : EntityTypeConfiguration<Roles>
    {
        public RolesMap()
        {
            // Primary Key
            HasKey(t => t.RoleId);
            // Properties
            Property(t => t.RoleName)
                .HasMaxLength(256);       
            // Table & Column Mappings
            ToTable("webpages_Roles");
            Property(t => t.RoleId).HasColumnName("RoleId");
            Property(t => t.RoleName).HasColumnName("RoleName");
        }
    }
public class UserRolesMap : EntityTypeConfiguration<UserRoles>
    {
        public UserRolesMap()
        {
            // Primary Key
            HasKey(t => t.UserId);
            HasKey(t => t.RoleId);          
            // Table & Column Mappings
            ToTable("webpages_UsersInRoles");
            Property(t => t.UserId).HasColumnName("UserId");
            Property(t => t.RoleId).HasColumnName("RoleId");

            // Relationships              
            HasRequired(t => t.User)
                .WithMany(t => t.UserUserRoles)
                .HasForeignKey(d => d.UserId);
            HasRequired(t => t.Roles)
                .WithMany(t => t.RoleUserRoles)
                .HasForeignKey(d => d.RoleId);
        }
    }

我做错了什么?

根据注释:

组合主键应构造为HasKey(t => new { t.UserId, t.RoleId });

看起来您想要在模型之间创建多对多关系。在这种情况下,您不需要UserRoles类,它将由EF在使用以下场景时生成:

public class User
{
  // other properties
  public virtual IList<Role> Roles {get;set;}
}
public class Role
{
  // other properties
  public virtual IList<User> Users {get;set;}
}

但是,如果您确实希望UserRoles模型存储附加信息,则需要在例如DbContext类的OnModelCreating()函数中手动进行映射。

最新更新