使用FluentAPI(EntityFramework)
1、使用FluentAPI
1.1、在OnModelCreating方法下使用
public class FluentApiDb:DbContext
{
public DbSet
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity
}
}
1.1、新增一个类,在OnModelCreating中引用
public class FluentApiDb:DbContext
{
public DbSet
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new TeacherMap());
modelBuilder.Configurations.Add(new StudentMap());
base.OnModelCreating(modelBuilder);
}
}
通过反射动态加入。利:自动加入,无需人工反复加;弊:影响性能。
public class FluentApiDb:DbContext
{
public DbSet
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes()
.Where(type => !String.IsNullOrEmpty(type.Namespace))
.Where(type => type.BaseType != null && type.BaseType.IsGenericType
&& type.BaseType.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));
foreach (var type in typesToRegister)
{
dynamic configurationInstance = Activator.CreateInstance(type);
modelBuilder.Configurations.Add(configurationInstance);
}
base.OnModelCreating(modelBuilder);
}
}
2、FluentAPI详细用法
- 设置主键
modelBuilder.Entity
- 设置联合主键
modelBuilder.Entity
- 取消数据库字段标识(取消自动增长)
modelBuilder.Entity
- 设置数据库字段标识(自动增长)
modelBuilder.Entity
- 设置字段最大长度
modelBuilder.Entity
- 设置字段为必需
modelBuilder.Entity
- 属性不映射到数据库
modelBuilder.Entity
- 将属性指定数据库列名:
modelBuilder.Entity
- 级联删除(数据库默认是不级联删除的)
modelBuilder.Entity
- 设置为Timestamp
modelBuilder.Entity
- 表1对0..1(Instructor实体可以包含零个或一个OfficeAssignment)
modelBuilder.Entity
- 表1对1
modelBuilder.Entity
- 表1对n(Department为主表)
modelBuilder.Entity
- 指定外键名(指定表Staff中的字段DepartmentID为外键)
modelBuilder.Entity
- 表n对n
modelBuilder.Entity
.HasMany(t => t.Instructors)
.WithMany(t => t.Courses)
- 表n对n指定连接表名及列名
modelBuilder.Entity
.HasMany(t => t.Instructors)
.WithMany(t => t.Courses)
.Map(m =>
{
m.ToTable(“CourseInstructor”);
m.MapLeftKey(“CourseID”);
m.MapRightKey(“InstructorID”);
});
作者:落地成佛
链接:https://www.jianshu.com/p/c82ef6babf8e
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。