指导上下文以使用自定义命名连接表来实现多对多实体关系

时间:2015-11-19 20:17:26

标签: c# entity-framework entity-framework-6 ef-fluent-api

我有两个有多对多关系的实体:

    [Table("Student", Schema = "School")]
    public class Student
    {
        public long ID { get; set; }

        public virtual List<Teacher> Teachers { get; set; }

        //...
    }

    [Table("Teacher", Schema = "School")]
    public class Teacher
    {
        public long ID { get; set; }

        public virtual List<Student> Students { get; set; }

        //...
    }

我在流畅的API中指定了如何构造连接表:

    public StudentMap(string schema)
    {
        //Where schema = "School"
        HasMany(p => p.Teachers)
            .WithMany(p => p.Students)
            .Map(m =>
            {
                m.ToTable("StudentsTeachers", schema);
                m.MapLeftKey("Student_ID");
                m.MapRightKey("Teacher_ID");
            });
    }

但是,当我去访问Student上的Teachers导航对象时,它默认为EF约定,而不是我为连接表指定的。如何指定SchoolContext我们应该查看School.StudentsTeachers表而不是dbo.StudentTeachers

问题不在于连接表的指定,也没有生成多对多关系。工作得很好。尝试使用实体时出现问题,我需要一种方法来指定关系应该使用我指定的连接表,而不是EF命名约定。通过使用如上所示的表属性,我能够使用其对表名的约定来解决EF的类似问题。我现在正在寻找一个等价的答案,除了关于存在的多对多连接表,但没有明确的模型

1 个答案:

答案 0 :(得分:0)

我认为这应该有效:

ServiceStack.AuthUserSession.