首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架5多对多

实体框架5多对多
EN

Stack Overflow用户
提问于 2012-10-02 03:31:12
回答 1查看 4.7K关注 0票数 2

我有问题,因为当我将以下代码添加到Course类中时,我只有2个表,而不是3个表

代码语言:javascript
复制
public int PersonId { get; set; }
[ForeignKey("PersonId")]
public virtual Person Student { get; set; }

你没有把这三行都写好,但我需要在课程中增加一个字段

代码语言:javascript
复制
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;
    }
}

请帮帮我

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-02 03:47:40

EF无法确定是Course.Student还是Course.Students引用Person.CoursesAttending。您必须给EF一个提示,例如通过在Course.Students上使用[InverseProperty]属性

代码语言:javascript
复制
[InverseProperty("CoursesAttending")]
public virtual ICollection<Person> Students { get; set; }

编辑

该模型将导致多个级联删除路径,即:当您删除一个Person时,join表中的记录也将被删除,但它还将删除此人通过Course.Person属性分配到的所有Course。删除的Course%s将再次删除连接表中的记录,这是同一表上的第二个删除路径。

SQL Server不支持多条级联删除路径,必须通过Fluent API禁用:

代码语言:javascript
复制
public class MyContext : DbContext
{
    //...

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Course>()
            .HasRequired(c => c.Student)
            .WithMany()
            .HasForeignKey(c => c.PersonId)
            .WillCascadeOnDelete(false);
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12679765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档