博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EntityFrameWork 实现实体类和DBContext分离在不同类库
阅读量:5105 次
发布时间:2019-06-13

本文共 3254 字,大约阅读时间需要 10 分钟。

在新建EF的时候,选择CodeFirst,会生成一个DBContext类似于下图,这个还是只有一个实体Score的时候,如果项目中实体很多,整个放在DBcontxt里面会显示的非常凌乱,这个时候咱们可以接着反射和EntityTypeConfiguration<T>来对内容进行分割

public partial class DBContext : DbContext    {        public DBContext()            : base("name=DBContext")        {        }        public virtual DbSet
Birds { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity
() .Property(e => e.Id); } }

 

这个时候,我们创建另外一个类库 TestEF.Data  在这个类库中,我们声明一个Map

public partial class BirdMap    {        partial void BirdMapAppend()        {            ToTable("ZX_Bird", "dbo");            this.Property(t => t.Id)               .HasColumnName("Id")               .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)               .IsRequired();            this.Property(t => t.Name)                .HasColumnName("Name")                .IsRequired();            this.Property(t => t.Age)                .HasColumnName("Age")                .IsRequired();        }    }
public partial class BirdMap: EntityTypeConfiguration
{ ///
/// Module-数据表映射构造函数 /// public BirdMap() { BirdMapAppend(); } ///
/// 额外的数据映射 /// partial void BirdMapAppend(); ///
/// 将当前实体映射对象注册到当前数据访问上下文实体映射配置注册器中 /// ///
实体映射配置注册器 public void RegistTo(System.Data.Entity.ModelConfiguration.Configuration.ConfigurationRegistrar configurations) { configurations.Add(this); } }

 

然后修改DBContext

public class TestContext : DbContext    {        //您的上下文已配置为从您的应用程序的配置文件(App.config 或 Web.config)        //使用“TestContext”连接字符串。默认情况下,此连接字符串针对您的 LocalDb 实例上的        //“TestEF.TestContext”数据库。        //         //如果您想要针对其他数据库和/或数据库提供程序,请在应用程序配置文件中修改“TestContext”        //连接字符串。        public TestContext()            : base("name=TestContext")        {        }        //public virtual DbSet
Birds { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { //modelBuilder.Entity
() // .Property(e => e.Id); string assembleFileName = Assembly.GetExecutingAssembly().CodeBase.Replace("TestEF.DLL", "TestEF.Data.DLL").Replace("file:///", ""); Assembly asm = Assembly.LoadFile(assembleFileName); var typesToRegister = asm.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); } }

这样我们通过反射,获取TestEF.DLL 里面的具有继承父类,并且父类为泛型类,并且泛型父类类型为 typeof(EntityTypeConfiguration<>)的类,进行注册,这样我们在DBContext文件里面就会很简洁,并且在BirdMap类中可以配置表信息,是否主键,属性长度等等约束

 

转载于:https://www.cnblogs.com/notyourdog/p/10511564.html

你可能感兴趣的文章
mysql 大牛博客_python爬虫抓取51cto博客大牛的文章保存到MySQL数据库
查看>>
java ee容器_Java EE容器
查看>>
java小程序视频_「小程序JAVA实战」小程序视频组件与api介绍(51)
查看>>
nqueens java_Matlab NQueens算法递归
查看>>
python的常用语句_python基础常用语句与字符串
查看>>
java int 数据类型_Java中的数据类型
查看>>
shell java cp_使用PowerShell远程运行Java
查看>>
java applet怎么传参_我可以将复杂参数传递给Java Applet吗?
查看>>
java三角形代码_java判断是否是三角形的方法(附代码)
查看>>
java的c import_关于编译(javac),import,package的再理解
查看>>
js原生popup_js来实现popup的生成,带钟罩,可移动popup,点击body可自动消失
查看>>
idea写java webservice_WebService系列之Idea 创建Webservice server 和 WebService Client
查看>>
centos7用yum安装java_Centos7中yum方式安装java
查看>>
python 忽略异常_python如何忽略异常
查看>>
java对redis性能监控编码_Redis性能监控指标汇总
查看>>
性能测试工具 java ur_jmeter之自定义java请求性能测试
查看>>
java 成员域_java – Eclipse为域对象和带有’m’后缀的类成员生成getter/setter
查看>>
java jute_ZooKeeper源码阅读(六):JUTE
查看>>
java 创建书类_1、创建实体类(Customer.java、Orders.java)复制代码 代码如下:package wck.stu.vo.oneToMany_single...
查看>>
java短信验证怎么实现6,如何实现java手机短信验证功能
查看>>