EF一对一,一对多,多对多

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangyinlon/article/details/84980449

总结一对多、多对多的“最佳实践”
一对多最佳方法(不配置一端的集合属性):
1、 多端
public class Student
{
public long Id { get; set; }
public string Name { get; set; }
public long ClassId { get; set; }
public virtual Class Class { get; set; }
}
2、 一端
public class Class
{
public long Id { get; set; }
public string Name { get; set; }
}
3、 在多端的模型配置(StudentConfig)中:
this.HasRequired(e => e.Class).WithMany() .HasForeignKey(e=>e.ClassId);

多对多最佳配置
1、 两端模型
public class Student
{
public long Id { get; set; }
public string Name { get; set; }
public virtual ICollection Teachers { get; set; } = new List();
}
public class Teacher
{
public long Id { get; set; }
public string Name { get; set; }
public virtual ICollection Students { get; set; } = new List();
}
2、 在其中一端配置(StudentConfig)
this.HasMany(e => e.Teachers).WithMany(e=>e.Students).Map(m =>//不要忘了WithMany的参数
m.ToTable(“T_StudentTeachers”).MapLeftKey(“StudentId”).MapRightKey(“TeacherId”));
4、 多对多中 移除关系:t.Students.Remove(t.Students.First()); 添加关系
5、 ()多对多中还可以为中间表建立一个实体方式映射。当然如果中间关系表还想有其他字
段,则要必须为中间表建立实体类(中间表和两个表之间就是两个一对多的关系了)。
6、 数据库创建策略(
):
如果数据库创建好了再修改模型或者配置,运行就会报错,那么就要手动删除数据库或者:
Database.SetInitializer(new DropCreateDatabaseIfModelChanges());如果报错“数据库正在使用”,可能是因为
开着 Mangement Studio,先关掉就行了。
知道就行了,只适合学习时候使用。

猜你喜欢

转载自blog.csdn.net/wangyinlon/article/details/84980449