我正在使用Entity Framework Code First。 Student
是School
的子实体。我希望Student
表具有复合主键:SchoolID
和StudentID
。我的代码目前只有StudentID
作为主键。 EF会自动创建外键FK_dbo.Students_dbo.Schools_School_SchoolID
。如何将此外键设置为复合主键的一部分?我不想添加新属性,因为Student
和School
是从大型JSON生成的。以下代码失败,因为billGates
和kofiAnnan
具有相同的主键。
class School
{
public School(int schoolID)
{
SchoolID = schoolID;
Students = new List<Student>();
}
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int SchoolID { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
class Student
{
public Student(int studentID)
{
StudentID = studentID;
}
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int StudentID { get; set; }
}
class EducationDbContext : DbContext
{
public EducationDbContext() : base("name=SqlConnection") { }
public DbSet<School> Schools { get; set; }
}
class Program
{
static void Main(string[] args)
{
using (var db = new EducationDbContext())
{
var harvard = new School(0);
var billGates = new Student(3);
harvard.Students.Add(billGates);
db.Schools.Add(harvard);
var mit = new School(1);
var kofiAnnan = new Student(3);
mit.Students.Add(kofiAnnan);
db.Schools.Add(mit);
db.SaveChanges();
}
}
}
编辑:我在下面使用的实际JSON是一个match
。每个match
都有多个teams
。每个team
都有多个bans
。我希望bans
表的主键是match
主键gameId
和team
主键teamId
的组合。