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方法,在方法中映射(注册)实体属性使用哪些表字段填充。

         

  • 相关阅读:
    (转)SVN命令详解
    CentOS 64位系统安装32位兼容库
    Eclipse4.4 Tomcat插件下载地址
    记:Android 安装apk的代码实现
    记: Android adb远程调试
    记:Ubuntu14.04 Android加载项目失败
    记:Ubuntu 14.04 安装32位库支持库失败
    记:Android 服务站 问题记录与解决方案
    记:Android 知识点整理 20140329
    微信小程序和微信公众号的id是一个吗
  • 原文地址:https://www.cnblogs.com/bro-ma/p/10693798.html
Copyright © 2011-2022 走看看