实体框架代码一个表中的第一个关系

时间:2013-12-16 09:03:24

标签: entity-framework asp.net-mvc-4 ef-code-first code-first

我在一个表中创建关系时遇到问题。我有一个UserProfile类。另一个用户只能由现有用户创建。所以我希望有一些字段包含有关谁创建用户以及创建用户的信息。也许代码会说更多:)

public class UserProfile
{
    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    [Required, MaxLength(30)]
    public string UserName { get; set; }

    [Column(TypeName = "date")]
    [Display(Name = "Data ważności")]
    public DateTime ExpirationDate { get; set; }

    [DataType(DataType.DateTime)]
    [Display(Name = "Data dodania")]
    [Column(TypeName = "datetime")]
    public DateTime sysRegDate { get; set; }

    [ForeignKey("sysRegUser")]
    public int? sysRegUserId { get; set; }

    [DataType(DataType.DateTime)]
    [Column(TypeName = "datetime")]
    public DateTime sysModDate { get; set; }

    [ForeignKey("sysModUser")]
    public int? sysModUserId { get; set; }

    public virtual UserProfile sysRegUser { get; set; }
    public virtual UserProfile sysModUser { get; set; }
}

但是当我创建迁移时,我收到错误:

System.Data.Entity.ModelConfiguration.ModelValidationException: One or more validation errors were detected during model generation:

\tSystem.Data.Entity.Edm.EdmAssociationEnd: : Multiplicity is not valid in Role 'UserProfile_sysModUser_Source' in relationship 'UserProfile_sysModUser'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.

提前感谢您的回答。

1 个答案:

答案 0 :(得分:0)

我已经使用此代码创建了父子关系,也许有帮助:

public class MyModel
{
  public int Id {get;set;}

  // ...

  public int? ParentId {get;set;}
  public virtual MyModel Parent {get;set;}

  public virtual IList<MyModel> Children {get;set;}
}

在DbContext中:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
  modelBuilder.Entity<MyModel>().HasOptional(p => p.Parent).WithMany(p => p.Children).HasForeignKey(p => p.ParentId);
  modelBuilder.Entity<MyModel>().Property(p => p.ParentId).HasColumnName("Parent");
}