簡體   English   中英

實體框架5多對多

[英]Entity framework 5 many to many

我有問題,因為當我在Course添加以下內容時,我只有2個表而不是3個

public int PersonId { get; set; }
[ForeignKey("PersonId")]
public virtual Person Student { get; set; }

您沒有這三行都很好,但是我在課程課程中需要一個附加字段

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual ICollection<Course> CoursesAttending { get; set; }
}

public class Course
{
    public int CourseId { get; set; }
    public string Title { get; set; }
    public int PersonId { get; set; }

        [ForeignKey("PersonId")]
    public virtual Person Student { get; set; }

    public virtual ICollection<Person> Students { get; set; }
}

public class SchoolContext : DbContext
{
    public DbSet<Course> Courses { get; set; }
    public DbSet<Person> People { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        Database.SetInitializer<SchoolContext>(
                new DropCreateDatabaseAlways<SchoolContext>());

        SchoolContext db = new SchoolContext();
        var cos = from d in db.Courses
                  select d;
    }
}

請幫我

EF無法確定Course.Student還是Course.Students是引用Person.CoursesAttending 您必須使用給EF一個提示,例如[InverseProperty]在屬性Course.Students

[InverseProperty("CoursesAttending")]
public virtual ICollection<Person> Students { get; set; }

編輯

該模型將導致多個級聯的刪除路徑,即:當刪除一個PersonCourse.Person表中的記錄也將被刪除,但是它還將刪除此人通過Course.Person屬性分配的所有Course 刪除的Course將再次刪除聯接表中的記錄,這是同一表上的第二條刪除路徑。

SQL Server不允許使用多個級聯刪除路徑,因此必須使用Fluent API禁用它:

public class MyContext : DbContext
{
    //...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Course>()
            .HasRequired(c => c.Student)
            .WithMany()
            .HasForeignKey(c => c.PersonId)
            .WillCascadeOnDelete(false);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM