将父实体属性设置为子实体中的主键

时间:2017-08-06 15:33:23

标签: c# sql-server ef-code-first

我正在使用Entity Framework Code First。 StudentSchool的子实体。我希望Student表具有复合主键:SchoolIDStudentID。我的代码目前只有StudentID作为主键。 EF会自动创建外键FK_dbo.Students_dbo.Schools_School_SchoolID。如何将此外键设置为复合主键的一部分?我不想添加新属性,因为StudentSchool是从大型JSON生成的。以下代码失败,因为billGateskofiAnnan具有相同的主键。

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主键gameIdteam主键teamId的组合。

https://pastebin.com/KBrXnt7Q

0 个答案:

没有答案