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>(); 			 	 
        } 
    }
  • 相关阅读:
    leetcode 110 Balanced Binary Tree
    Spark编程模型
    Spark1.4从HDFS读取文件运行Java语言WordCounts并将结果保存至HDFS
    __x__(27)0907第四天__ float 浮动
    __x__(26)0907第四天__文档流_网页最底层
    __x__(25)0907第四天__ overflow 父元素对溢出内容的处理
    __x__(24)0907第四天__ display 和 visibility
    __x__(23)0907第四天__浏览器默认样式
    __x__(22)0907第四天__ 垂直外边距重叠
    __x__(21)0907第四天__ css 盒模型 (框模型)
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4536117.html
Copyright © 2011-2022 走看看