实现IConfigurationConvention<Type, EntityTypeConfiguration>接口,然后重写ProductContext的OnModelCreating(DbModelBuilder modelBuilder)方法。
1 public class DefaultTableConvention
2 : IConfigurationConvention<Type, EntityTypeConfiguration>
3 {
4 public void Apply(
5 Type type,
6 Func<EntityTypeConfiguration> configuration)
7 {
8 TableAttribute[] tableAttributes = (TableAttribute[])type.GetCustomAttributes(typeof(TableAttribute), false);
9
10 if (tableAttributes.Length == 0)
11 {
12 configuration().ToTable("Shop_" + type.Name);
13 }
14 }
15 }
16
17 public class ProductContext : DbContext
18 {
19 protected override void OnModelCreating(DbModelBuilder modelBuilder)
20 {
21 modelBuilder.Conventions.Add<DefaultTableConvention>();
22 }
23 }
从上面的代码可以看到,Configuration Conventions的方式需要自行判断实体是否使用TableAttribute指定了表名,如果是,则不使用全局的配置。而Lightweight Conventions则默认优先使用TableAttribute指定的表名。可以看出,Configuration Conventions实现起来相对繁琐了一点,但是自由度也更高。
IConfigurationConvention接口有两个类型参数:TMemberInfo和TConfiguration。它们用来过滤你想自定义约定的模型元素。
第一个类型参数,TMemberInfo,可以是一下两个值:
第二个类型参数,TConfiguration,可以是一下任意一种。
-
ModelConfiguration(System.Data.Entity.ModelConfiguration.Configuration)
-
EntityTypeConfiguration(System.Data.Entity.ModelConfiguration.Configuration.Types)
-
PropertyConfiguration(System.Data.Entity.ModelConfiguration.Configuration.Properties)
-
NavigationPropertyConfiguration(System.Data.Entity.ModelConfiguration.Configuration.Properties.Navigation)
-
PrimitivePropertyConfiguration(System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
-
DateTimePropertyConfiguration(System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
-
DecimalPropertyConfiguration(System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
-
LengthPropertyConfiguration(System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
-
BinaryPropertyConfiguration(System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
-
StringPropertyConfiguration(System.Data.Entity.ModelConfiguration.Configuration.Properties.Primitive)
注意,Type和PropertyConfiguration(以及它的子类)不能混用,否则Configuration Conventions将不会生效。
增加自定义的Data Annotation
利用Custom Code First Conventions,我们还可以扩展自己的Data Annotation。例如,增加一个EmailAttribute特性,然后在Lightweight Conventions或者Configuration Conventions中,判断属性是否应用了EmailAttribute特性;如果是,则将列名映射为“Email”,列类型映射为“nvarchar(255)”,达到了[Column("Email")]和[MaxLength(255)]共同作用的效果。
优质内容筛选与推荐>>
1、MQTT 5.0 正式成为OASIS标准2、C开发系列-指针3、leetcode 1004. 最大连续1的个数 III(Max Consecutive Ones III)4、2016HUAS_ACM暑假集训3B - Frogger5、Android 去除状态栏和隐藏虚拟按键
长按二维码向我转账
受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。
阅读
好看
已推荐到看一看
你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
取消
分享想法到看一看
确定
最多200字,当前共字