在实体框架中,我尝试根据此tutorial配置 0到多个关系。在这里,学生可以拥有 0或个联系人。但是代码在运行时显示在下面的异常。
System.Data.Entity.ModelConfiguration.ModelValidationException
StudentId:名称:类型中的每个属性名称必须是唯一的。属性 姓名' StudentId'已定义。
public class Student
{
public Student()
{
Contacts = new EntityHashSet<Contact>();
}
public int StudentId { get; set; }
public string Name { get; set; }
public virtual IEntityHashSet<Contact> Contacts { get; private set; }
}
public class Contact
{
public int ContactId { get; private set; }
public string Name { get; private set; }
public int StudentId { get; set; }
public virtual Student Student { get; protected set; }
}
public static void Configure(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Student>()
.HasMany(e => e.Contacts)
.WithRequired(e => e.Student)
.HasForeignKey(e => e.StudentId);
}
我也试过删除HasForeignKey。但没有任何作用。
答案 0 :(得分:1)
你忘了申报学生的钥匙
modelBuilder.Entity<Student>().HasKey(x => x.StudentId);
答案 1 :(得分:0)
首先,我认为适当的关系是一对一,一个学生可以有多个联系人(从0到多)。
我以这种方式建立了关系:
public class Student
{
public Student()
{
Contacts = new HashSet<Contacts>();
}
public int StudentId { get; set; }
public string Name { get; set; }
public virtual ICollection<Contact> Contacts { get; set; }
}
public class Contact
{
public int ContactId { get; set; }
public string Name { get; set; }
public int StudentId { get; set; } //usually I use Annotations here to create the DB like.. [Column("column_name")]
//Here I use [InverseProperty(Contact), ForeignKey("StudentId")]
public virtual Student Student { get; set; }
}
public static void Configure(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Contacts>.HasOne(a => a.Student).WithMany(b => b.Contacts).HasForeignKey(a => a.StudentId);
}
它应该在没有注释的情况下工作。