code First 四
2024-08-29 06:17:22
先从现有数据库获取代码: 我们创建模型的时候选择Code First就可以了
public ModelStudent()
: base("name=ModelStudent")
{
} public virtual DbSet<Course> Courses { get; set; }
public virtual DbSet<Standard> Standards { get; set; }
public virtual DbSet<Student> Students { get; set; }
public virtual DbSet<StudentAddress> StudentAddresses { get; set; }
public virtual DbSet<sysdiagram> sysdiagrams { get; set; }
public virtual DbSet<Teacher> Teachers { get; set; }
public virtual DbSet<View_StudentCourse> View_StudentCourse { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Course>()
.Property(e => e.CourseName)
.IsUnicode(false); modelBuilder.Entity<Course>()
.HasMany(e => e.Students)
.WithMany(e => e.Courses)
.Map(m => m.ToTable("StudentCourse").MapLeftKey("CourseId").MapRightKey("StudentId")); modelBuilder.Entity<Standard>()
.Property(e => e.StandardName)
.IsUnicode(false); modelBuilder.Entity<Standard>()
.Property(e => e.Description)
.IsUnicode(false); modelBuilder.Entity<Standard>()
.HasMany(e => e.Students)
.WithOptional(e => e.Standard)
.WillCascadeOnDelete(); modelBuilder.Entity<Standard>()
.HasMany(e => e.Teachers)
.WithOptional(e => e.Standard)
.WillCascadeOnDelete(); modelBuilder.Entity<Student>()
.Property(e => e.StudentName)
.IsUnicode(false); modelBuilder.Entity<Student>()
.Property(e => e.RowVersion)
.IsFixedLength(); modelBuilder.Entity<Student>()
.HasOptional(e => e.StudentAddress)
.WithRequired(e => e.Student)
.WillCascadeOnDelete(); modelBuilder.Entity<StudentAddress>()
.Property(e => e.Address1)
.IsUnicode(false); modelBuilder.Entity<StudentAddress>()
.Property(e => e.Address2)
.IsUnicode(false); modelBuilder.Entity<StudentAddress>()
.Property(e => e.City)
.IsUnicode(false); modelBuilder.Entity<StudentAddress>()
.Property(e => e.State)
.IsUnicode(false); modelBuilder.Entity<Teacher>()
.Property(e => e.TeacherName)
.IsUnicode(false); modelBuilder.Entity<Teacher>()
.HasMany(e => e.Courses)
.WithOptional(e => e.Teacher)
.WillCascadeOnDelete(); modelBuilder.Entity<View_StudentCourse>()
.Property(e => e.StudentName)
.IsUnicode(false); modelBuilder.Entity<View_StudentCourse>()
.Property(e => e.CourseName)
.IsUnicode(false);
}
实体框架中的级联删除代码优先:
删除主体记录时,级联删除会自动删除相关记录或将空值设置为foreignkey属性。
对于所有类型的关系(如一对一,一对多和多对多),实体框架中默认启用级联删除。
一对一级联删除:
一对多级联删除:
关闭级联删除:
在Code-First中移动配置以分隔类:
Code-First使您可以将与一个域类有关的所有配置移动到一个单独的类。
可以将与学生实体有关的所有配置移动到从中派生出的单独的类EntityTypeConfiguration<TEntity>
。
代码优先的数据库初始化策略:
有四种不同的数据库初始化策略:
- CreateDatabaseIfNotExists:这是默认的初始值设定项。如果每个配置都不存在,它将创建数据库。但是,如果更改模型类,然后使用此初始化程序运行应用程序,则会引发异常。
- DropCreateDatabaseIfModelChanges:如果您的模型类(实体类)已被更改,此初始化程序将删除现有的数据库并创建一个新的数据库。所以,当模型类更改时,您不必担心维护数据库模式。
- DropCreateDatabaseAlways:这个初始化器在每次运行应用程序时都会删除一个现有的数据库,而不管你的模型类是否已经改变。当你想要新的数据库,每次运行应用程序,就像在开发应用程序时一样,这将会很有用。
- 自定义数据库初始化程序:如果上述任何一个不满足您的要求,或者您想要使用上述初始化程序来初始化数据库,您也可以创建自己的自定义初始化程序。
要使用上述DB初始化策略之一,必须在Context类中使用Database类设置DB初始值设定项,如下所示:
在Code-First中关闭数据库初始化程序:
代码优先种子数据库:
可以在数据库初始化过程中将数据插入到数据库表中。如果你想为你的应用程序提供一些测试数据或者为你的应用程序提供一些默认的主数据,这将是非常重要的。
代码优先到这里就完了。
最新文章
- C语言 06 指针
- memset 的实现分析
- nutz如何体现mvc思想的
- 记录Sqlserver2012附加Sqlserver2008的数据库出错的解决方案
- InnoDB源码分析--事务日志(二)
- mybatis3.3 + struts2.3.24 + mysql5.1.22开发环境搭建及相关说明
- linux 查看服务器性能常用命令
- JAVA 中BIO,NIO,AIO的理解
- c# 简单的通用基础字典
- 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics)之间有什么关系?
- Two analytical 2d line intersection in OpenCASCADE
- 如何给自己的外包APP开发报价?
- flex外包团队—北京动点软件:推荐一本不错的Flex书籍
- Git基础命令的使用——详细教程2
- C 语言整型谜题
- 静态库打包——.a和.framework文件
- 微信小程序用户数据解密
- Java 笔记20180123
- 深入理解jvm--Java中init和clinit区别完全解析(转)
- LM358电流检测电路