use*_*160 2 c# database asp.net-mvc orm entity-framework
我有问题,因为当我将以下内容添加到类中时,Course我只有2个表而不是3个
public int PersonId { get; set; }
[ForeignKey("PersonId")]
public virtual Person Student { get; set; }
Run Code Online (Sandbox Code Playgroud)
你没有这三条线路都很好,但我需要在课程课程中增加一个字段
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;
}
}
Run Code Online (Sandbox Code Playgroud)
请帮我
EF不能决定是否Course.Student或Course.Students指Person.CoursesAttending.您必须给EF一个提示,例如使用以下[InverseProperty]属性Course.Students:
[InverseProperty("CoursesAttending")]
public virtual ICollection<Person> Students { get; set; }
Run Code Online (Sandbox Code Playgroud)
编辑
该模型将导致多个级联删除路径,即:当您删除Person连接表中的记录时也将被删除,但它也将删除Course该人通过该Course.Person属性分配的所有内容.删除的Courses将再次删除连接表中的记录,这是同一个表上的第二个删除路径.
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);
}
}
Run Code Online (Sandbox Code Playgroud)