我在一个表中创建关系时遇到问题。我有一个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 '*'.
提前感谢您的回答。
答案 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");
}