zoukankan      html  css  js  c++  java
  • EF单实对应多表

    一、单实体对应多表

      适用场景主表,拥有相同主键附属表或扩展表。

      

     1、 建表词句

      

    CREATE TABLE [Chapter2].[Product](
        [SKU] [int] primary key ,
        [Description] [varchar](50) NOT NULL,
        [Price] [decimal](18, 2) NOT NULL)
    
    CREATE TABLE [Chapter2].[ProductWebInfo](
        [SKU] [int] primary key ,
        [ImageURL] [varchar](1024) NULL
    ) 
    View Code

     2、新建控制程序,添加EntityFramework 引用。

       3、创建Product实体,实体包含两个表组合字段

      

    public class Product
        {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.None)]
            public int SKU { get; set; }
            public string Description { get; set; }
            public decimal Price { get; set; }
            public string ImageURL { get; set; }
        }
    View Code

       4、新建DbContext子类,注意连接字符串。     

    public class ProductContext: DbContext
        {
            public DbSet<Product> Products { get; set; }
    
            public ProductContext() : base("EFRecipesEntities")
            {
    
            }
    
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                base.OnModelCreating(modelBuilder);
                modelBuilder.Entity<Product>()
                    .Map(m =>
                    {
                        m.Properties(p => new { p.SKU, p.Description, p.Price });
                        m.ToTable("Product", "Chapter2");
                    })
                    .Map(m =>
                    {
                        m.Properties(p => new { p.SKU, p.ImageURL });
                        m.ToTable("ProductWebInfo", "Chapter2");
                    });
            }
        }
    View Code

        注意代码中,Map方法,由多个表组合成单个类配置。

        

          5、修改控制台程序代码

      

    static void Main(string[] args)
            {
                using (var context = new ProductContext())
                {
                    var product = new Product
                    {
                        SKU = 147,
                        Description = "Expandable Hydration Pack",
                        Price = 19.97M,
                        ImageURL = "/pack147.jpg"
                    };
                    context.Products.Add(product);
                    product = new Product
                    {
                        SKU = 178,
                        Description = "Rugged Ranger Duffel Bag",
                        Price = 39.97M,
                        ImageURL = "/pack178.jpg"
                    };
                    context.Products.Add(product);
                    product = new Product
                    {
                        SKU = 186,
                        Description = "Range Field Pack",
                        Price = 98.97M,
                        ImageURL = "/noimage.jp"
                    };
                    context.Products.Add(product);
                    product = new Product
                    {
                        SKU = 202,
                        Description = "Small Deployment Back Pack",
                        Price = 29.97M,
                        ImageURL = "/pack202.jpg"
                    };
                    context.Products.Add(product);
                    context.SaveChanges();
                }
                using (var context = new ProductContext())
                {
                    foreach (var p in context.Products)
                    {
                        Console.WriteLine("{0} {1} {2} {3}", p.SKU, p.Description,
                            p.Price.ToString("C"), p.ImageURL);
                    }
                }
    
                Console.ReadKey();
            }
    View Code

      运行使用SQLProfile查看查询执行语句及结果。

     

    总结:单实体多表时,重写DbContext字类,OnModelCreating方法,在方法中映射(注册)实体属性使用哪些表字段填充。

         

  • 相关阅读:
    循环的注意点
    c语言实践输出某个区间中不是3的倍数的偶数
    while循环for循环优缺点和应用
    while 和do while循环的区别
    多重if else和switch case的区别
    if else的执行流程
    多个if和一个ifelse的区别
    对两个变量排序,从小到大输出
    【译】第四篇 Integration Services:增量加载-Updating Rows
    【译】第三篇 Integration Services:增量加载-Adding Rows
  • 原文地址:https://www.cnblogs.com/bro-ma/p/10693798.html
Copyright © 2011-2022 走看看