Entity Framework中怎么使用DbModelBuilder API创建表结构
这篇文章主要讲解了“EntityFramework中怎么使用DbModelBuilderAPI创建表结构”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“EntityFramework中怎么使用DbModelBuilderAPI创建表结构”吧!
DbContext类有一个OnModelCreating方法,它用于流利地配置领域类到数据库模式的映射。下面我们以fluent API的方式来定义映射。
首先,先将Product类注释掉,重新编写该类,重新编写后的Product类:
usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceEFFluentAPI.Model{publicclassProduct{publicintProductNo{get;set;}publicstringProductName{get;set;}publicdoubleProductPrice{get;set;}}}
然后在数据库上下文Context类中的OnModelCreating方法中使用fluent API来定义Product表的数据库模式:
usingEFFluentAPI.Model;usingSystem;usingSystem.Collections.Generic;usingSystem.Data.Entity;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespaceEFFluentAPI.EFContext{publicclassContext:DbContext{publicContext():base("DbConnection"){}publicDbSet<Product>Products{get;set;}///<summary>///重新OnModelCreating方法///</summary>///<paramname="modelBuilder"></param>protectedoverridevoidOnModelCreating(DbModelBuildermodelBuilder){//映射到表Product,ProductNo和ProductName作为复合主键modelBuilder.Entity<Product>().ToTable("Product").HasKey(p=>new{p.ProductNo,p.ProductName});//ProductNo映射到数据表中的列名是IdmodelBuilder.Entity<Product>().Property(p=>p.ProductNo).HasColumnName("Id");modelBuilder.Entity<Product>().Property(p=>p.ProductName).IsRequired()//设置ProductName是必须的,即不能为null,默认是可以为null的.IsUnicode()//设置ProductName列为Unicode字符,实际上默认就是Unicode字符,所以该方法可以不写。.HasMaxLength(10);//设置ProductName列的最大长度是10base.OnModelCreating(modelBuilder);}}}
modelBuilder.Entity<Product>()会得到EntityTypeConfiguration类的一个实例。此外,使用fluent API的一个重要决定因素是我们是否使用了外部的POCO类,即实体模型类是否来自一个类库。我们无法修改类库中类的定义,所以不能通过数据注解来提供映射细节。这种情况下,我们必须使用fluent API。
什么是POCO?
POCO是指Plain Old Class Object,也就是最基本的CLR Class,在原先的EF中,实体类通常是从一个基类继承下来的,而且带有大量的属性描述。而POCO则是指最原始的Class,换句话说这个实体的Class仅仅需要从Object继承即可,不需要从某一个特定的基类继承。主要是配合Code First使用。Code First则是指我们先定义POCO这样的实体Class,然后生成数据库。实际上现在也可以使用Entity Framweork Power tools将已经存在的数据库反向生成POCO的Class(不通过edmx文件)。
程序运行后创建的数据库如下图所示:
感谢各位的阅读,以上就是“EntityFramework中怎么使用DbModelBuilderAPI创建表结构”的内容了,经过本文的学习后,相信大家对EntityFramework中怎么使用DbModelBuilderAPI创建表结构这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是恰卡编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!