zoukankan      html  css  js  c++  java
  • EFCodeFirst属性映射约定

    EFCodeFirst属性映射约定

    EFCodeFirst
    属性映射约定

    CodeFirst与数据表之间得映射方式又两种:Data Annotation和Fluent API
    默认约定:

    表名为类名的复数。
    创建表得所有者为dbo。

    int类型属性映射成数据库int类型。
    string类型属性映射成数据库NVARCHAR类型。
    若类的字符串类型属性未设置MaxLength,则生成对应的列类型为NVARCHAR(MAX)。

    默认主键约束:属性名为[ID]或[类名 + ID]

    对于int类型主键,会自动增长。

    1 自定义映射表名以及所有者

    Data Annotation

    1. //必要引用 
    2. using System.ComponentModel.DataAnnotations.Schema; 
    3. //映射表名 
    4. [Table("Product")] 
    5. public class Product 
    6. //映射表名以及所有者 
    7. [Table("Product", Schema = "dbo")] 
    8. public class Product 

    Fluent API方式

    1. //重写OnModelCreating方法实现 映射表名 
    2. protected override void OnModelCreating(DbModelBuilder modelBuilder) 

    3. modelBuilder.Entity<Product>().ToTable("Product"); 

    4. //重写OnModelCreating方法实现 映射表名以及所有者 
    5. protected override void OnModelCreating(DbModelBuilder modelBuilder) 

    6. modelBuilder.Entity<Product>().ToTable("Product", "dbo"); 

    2.字段名、长度、数据类型及是否可空

    Data Annotation

    1. //映射列名 
    2. [Column("ProductID")] 
    3. public int ProductID { get; set; } 
    4. //映射列名,长度,是否为空 
    5. [MaxLength(100)] 
    6. [Required, Column("ProductName")] 
    7. public string ProductName { get; set; } 
    8. //指定映射的数据类型 
    9. [Column("UnitPrice", TypeName = "MONEY")] 
    10. public decimal UnitPrice { get; set; } 
    11. //设置Text 
    12. [Column("Remark", TypeName = "text")] 
    13. public string Remark { get; set; } 

    Fluent API方式

    1. protected override void OnModelCreating(DbModelBuilder modelBuilder) 

    2. //映射列名 
    3. modelBuilder.Entity<Product>().Property(t => t.ProductID) 
    4. .HasColumnName("ProductID"); 
    5. //映射列名,是否为空,最大长度 
    6. modelBuilder.Entity<Product>().Property(t => t.ProductName) 
    7. .IsRequired() 
    8. .HasColumnName("ProductName"
    9.      .HasMaxLength(100); 

    10. //指定映射的数据类型 
    11. modelBuilder.Entity<Product>().Property(t => t.UnitPrice) 
    12. .HasColumnName("UnitPrice"
    13. .HasColumnType("MONEY"); 
    14. //设置Text 
    15. modelBuilder.Entity<Category>().Property(t => t.Remark) 
    16. .HasColumnName("Remark"
    17. .HasColumnType("text"); 

    3.主键

    Data Annotation

    1. [Key] 
    2. [Column("ProductID")] 
    3. public int ProductID { get; set; } 

    Fluent API方式

    1. protected override void OnModelCreating(DbModelBuilder modelBuilder) 

    2. modelBuilder.Entity<Product>().HasKey(t => t.ProductID); 

    3. //多主键 
    4. protected override void OnModelCreating(DbModelBuilder modelBuilder) 

    5. modelBuilder.Entity<Product>().HasKey(t => new { t.KeyID, t.CandidateID }); 

    4.数据库自动生成字段值

    Data Annotation

    1. //取消int类型主键自动增长 
    2. [Key] 
    3. [Column("ProductID")] 
    4. [DatabaseGenerated(DatabaseGeneratedOption.None)] 
    5. public int ProductID { get; set; } 
    6. [Key] 
    7. [Column("CategoryID")] 
    8. [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    9. public int CategoryID { get; set; } 

    Fluent API方式

    1. //取消int类型主键自动增长 
    2. protected override void OnModelCreating(DbModelBuilder modelBuilder) 

    3. modelBuilder.Entity<Product>().HasKey(t => t.ProductID); 
    4. modelBuilder.Entity<Product>().Property(t => t.ProductID) 
    5. .HasColumnName("ProductID"
    6. .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 

    7. modelBuilder.Entity<Category>().ToTable("Category", "dbo"); 
    8. modelBuilder.Entity<Category>().HasKey(t => t.CategoryID); 
    9. modelBuilder.Entity<Category>().Property(t => t.CategoryID) 
    10. .HasColumnName("CategoryID"
    11. .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

    5.数字类型长度及精度

    Fluent API方式

    1. protected override void OnModelCreating(DbModelBuilder modelBuilder) 

    2. modelBuilder.Entity<Product>().Property(t => t.UnitPrice) 
    3. .HasColumnName("UnitPrice"
    4. .HasPrecision(18, 2); 

    6.非数据库字段属性

    Data Annotation

    1. [NotMapped] 
    2. public string Remark { get; set; } 

    Fluent API方式

    1. protected override void OnModelCreating(DbModelBuilder modelBuilder) 

    2. modelBuilder.Entity<Product>().Ignore(t => t.Remark); 

    7.Fluent API配置Configuration映射类

    方便维护

    1. using System; 
    2. using System.Collections.Generic; 
    3. using System.Linq; 
    4. using System.Text; 
    5.  
    6. using System.ComponentModel.DataAnnotations.Schema; 
    7. using System.Data.Entity.ModelConfiguration; 
    8.  
    9. using Portal.Entities; 
    10.  
    11. namespace Portal.Mapping 

    12. public class ProductMap : EntityTypeConfiguration<Product

    13. public ProductMap() 

    14. // Primary Key 
    15. this.HasKey(t => t.ProductID); 
    16.  
    17. // Properties 
    18. this.Property(t => t.ProductID) 
    19. .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None); 
    20. this.Property(t => t.ProductName) 
    21. .IsRequired() 
    22. .HasMaxLength(100); 
    23.  
    24. // Table & Column Mappings 
    25. this.ToTable("Product"); 
    26. this.Property(t => t.ProductID).HasColumnName("ProductID"); 
    27. this.Property(t => t.ProductName).HasColumnName("ProductName"); 
    28. this.Property(t => t.UnitPrice) 
    29. .HasColumnName("UnitPrice"
    30. .HasPrecision(18, 2); 



    1. protected override void OnModelCreating(DbModelBuilder modelBuilder) 

    2. modelBuilder.Configurations.Add(new ProductMap()); 

  • 相关阅读:
    jsp转向
    什么是 XDoclet?
    tomcat中的几点配置说明
    mysql5问题
    POJ 3734 Blocks
    POJ 2409 Let it Bead
    HDU 1171 Big Event in HDU
    POJ 3046 Ant Counting
    HDU 2082 找单词
    POJ 1286 Necklace of Beads
  • 原文地址:https://www.cnblogs.com/mmry/p/7060608.html
Copyright © 2011-2022 走看看