首頁 > 軟體

Entity Framework實體拆分多個表

2022-03-05 10:01:00

一、概念

實體拆分:一個實體拆分成多個表,如Product實體,可以拆分成Product和ProductWebInfo兩個表,Product表用於儲存商品的字元類資訊,ProductWebInfo用於儲存商品的圖片資訊,兩張表通過SKU進行關聯。

1、Product實體類結構:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 實體拆分.Model
{
    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; }
    }
}

 2、資料實體類結構:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 實體拆分.Model;

namespace 實體拆分.DatabaseContext
{
    public class EFDbContext :DbContext
    {
        public EFDbContext()
            : base("name=Default")
        { }


        public DbSet<Product> Products { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Product>().Map(p =>
            {
                p.Properties(m => new { m.SKU, m.Price, m.Description });
                p.ToTable("Product");
            })
            .Map(p =>
            {
                p.Properties(m => new { m.SKU, m.ImageURL });
                p.ToTable("ProductWebInfo");
            });


            base.OnModelCreating(modelBuilder);
        }
    }
}

 3、使用資料遷移生成資料庫,生成後的表結構如下圖所示:

4、測試資料:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 實體拆分.DatabaseContext;

namespace 實體拆分
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new EFDbContext())
            {
                context.Products.Add(new Model.Product() {
                    SKU=293,
                    Description="C#高階程式設計(第10版)",
                    Price=299 ,
                    ImageURL="http://image.baidu.com/1.jpg"
                });
                // 儲存
                context.SaveChanges();
            }

            Console.WriteLine("建立成功");
            Console.ReadKey();
        }
    }
}

 5、執行程式,查詢資料庫結果

總結

將實體拆分成多表的步驟:

1、在工程中建立一個新類繼承自DbContext類。
2、建立Product的POCO類。
3、在新建立的DbContext子類中新增屬性:DbSet<Product>。
4、重寫DbContext類的OnModelCreating()方法。

點此下載範例程式碼

到此這篇關於Entity Framework實體拆分多個表的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com