zoukankan      html  css  js  c++  java
  • EF中的约定

    优先级:Fluent API >数据注释>约定

    CodeFirst约定

    主键约定

    如果类的属性名为"ID"(不区分大小写)或类名的后面跟有"ID",则code First会推断该属性是主键,如果主键属性的类型为数值或 GUID,则将其配置为标识列。

    关系约定

    Code First 根据针对类型定义的导航属性来推断关系。除导航属性外,建议还要包括表示依赖对象的类型的外键属性。任何数据类型与主体主键属性相同、遵循以下一种格式的属性都表示关系的外键:“<导航属性名称><主体主键属性>”、“<主体类名><主键属性名称>”或“<主体主键属性名称>”。如果找到多个匹配项,则优先级符合上面列出的顺序。外键检测不区分大小写。在检测外键属性时,Code First 基于外键的可空性推断关系的多重性。如果属性可以为 Null,则将关系注册为可选关系;否则,将关系注册为必需关系。

    如果依赖实体上的外键不能为 Null,则 Code First 对关系设置级联删除。如果依赖实体上的外键可以为 Null,则 Code First 不对关系设置级联删除,并且在删除主体时,会将该外键设置为 Null。通过使用 Fluent API,可以覆盖由约定检测的多重性和级联删除行为。

    复杂类型约定

    当 Code First 发现无法推断主键以及未通过数据注释或 Fluent API 注册主键的类时,类型会自动注册为复杂类型。复杂类型检测还要求类型不具有引用实体类型的属性,并且未被其他类型的集合属性引用。对于以下类定义,Code First 推断 Details 是复杂类型,因为它没有主键。

    public partial class OnsiteCourse : Course 
    { 
        public OnsiteCourse() 
        { 
            Details = new Details(); 
        } 
     
        public Details Details { get; set; } 
    } 
     
    public class Details 
    { 
        public System.DateTime Time { get; set; } 
        public string Location { get; set; } 
        public string Days { get; set; } 
    }
    

    移除约定

    可以移除在 System.Data.Entity.ModelConfiguration.Conventions 命名空间中定义的任何约定。下面的示例移除 PluralizingTableNameConvention

    public class SchoolEntities : DbContext 
    { 
         . . . 
     
        protected override void OnModelCreating(DbModelBuilder modelBuilder) 
        {   
      		modelBuilder.Conventions.Remove<PluralizingTableNameCon		vention>(); 			 	 
        } 
    }
  • 相关阅读:
    c++ --> 虚函数
    Algorithm --> 全排列
    Algorithm --> 矩阵链乘法
    STL --> set用法
    STL --> list用法
    Algorithm --> 最长公共子序列(LCS)
    Zookeeper使用实例——服务节点管理
    Zookeeper使用实例——分布式共享锁
    Zookeeper初探
    Java设计模式应用——备忘录模式
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4536117.html
Copyright © 2011-2022 走看看