1. 基本引用模式:
this.Has****** (p=>p.AAA).With******() // ******有這幾個可選值:
- Optional 可選(0或1個)
- Required有且只有一個(1個)
- Many(多個)
2. 一對多關系配置:
基本的插入查詢(建立好外鍵約束):
public class Student
{
public long ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public virtual Class cls { get; set; }
public long classId { get; set; }
}
public class Class
{
public long ID { get; set; }
public string Name { get; set; }
}
插入數(shù)據(jù):
using (TestDBContent tdc = new TestDBContent())
{
Class cls = new Class() { Name="測試1班"};
tdc.Classes.Add(cls);
Student stu = new Student() {
Age=18,
cls=cls,
Name="風雪幻林"
};
tdc.students.Add(stu);
tdc.SaveChanges();
}
2.1 不要設計雙向關系:
public class Class
{
public long ID { get; set; }
public string Name { get; set; }
public ICollection<Student> students { get; set; }
}
查詢數(shù)據(jù):
Class clz = tdc.Classes.First();
var stus = tdc.students.Where(i => i.classId == clz.ID);
foreach (var item in stus)
{
Console.WriteLine(item.Name);
}
2.2 通過Fluent API做配置:
- 在一對多的表中(多的一端做配置)
this. HasRequired(s=> s.Class).WithMany() .HasForeignKey(s => s.ClassId) - 找不到 Class_Id 字段
需要在 ClassConfig 中再反向配置一遍
3. 多對多關系配置:
- 推薦配置:
public class Student
{
public Student()
{
teachers = new List<Teacher>();
}
public long ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public virtual ICollection<Teacher> teachers { get; set; }
}
public class Teacher
{
public Teacher()
{
students = new List<Student>();
}
public long ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Student> students { get; set; }
}
- Fluent API 多對多的配置:
- 在其中一端配置
public class TeacherConfig : EntityTypeConfiguration<Teacher>
{
public TeacherConfig()
{
this.ToTable("t_class");
this.Property(e => e.Name).HasMaxLength(30).IsRequired();
this.HasMany(e=>e.students).WithMany(i=>i.teachers).Map(m=>m.ToTable("t_teacherstudent").MapLeftKey("techerId").MapRightKey("studentId"));
}
}
public class StudentConfig : EntityTypeConfiguration<Student>
{
public StudentConfig()
{
this.ToTable("t_student");
}
}
- 調(diào)用:
static void Main(string[] args)
{
Teacher t = new Teacher() { Name = "語文老師" };
Teacher t2 = new Teacher() { Name = "數(shù)學老師" };
Student s = new Student() { Name = "張三", Age = 21 };
Student s2 = new Student() { Name = "李四", Age = 22 };
using (TestDBContent tdb =new TestDBContent ())
{
t.students.Add(s);
t.students.Add(s2);
t2.students.Add(s);
t2.students.Add(s2);
tdb.teachers.Add(t);
tdb.teachers.Add(t2);
tdb.SaveChanges();
}
Console.WriteLine("ok");
Console.ReadKey();
}
- 多對多的關系:
- 移除關系: t.Students.Remove(t.Students.First())