根據該篇文章 -
分割的實體設計工具 的練習筆記,目的是要把 2 個 Entity 整合為 1 個並對應到 2 個 Table 去
MSDN 說明
當多個資料表共用共同的索引鍵時,您可以將實體對應至多個資料表。 適用於將實體類型對應至兩個資料表的概念,很容易擴大為將實體類型對應至兩個以上的資料表。
該文章的範例並不在
School 資料庫內,文章內是另外建立一個 EntitySplitting DB 來放 Person 和 PersonInfo 這兩個 Table
CREATE TABLE [dbo].[Person] (
[PersonId] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (200) NULL,
[LastName] NVARCHAR (200) NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId] ASC));
CREATE TABLE [dbo].[PersonInfo] (
[PersonId] INT NOT NULL,
[Email] NVARCHAR (200) NULL,
[Phone] NVARCHAR (50) NULL,
CONSTRAINT [PK_PersonInfo] PRIMARY KEY CLUSTERED ([PersonId] ASC),
CONSTRAINT [FK_Person_PersonInfo] FOREIGN KEY ([PersonId]) REFERENCES [dbo].[Person] ([PersonId]) ON DELETE CASCADE);
把 Person 和 PersonInfo 拉進來
剪下 PersonInfo 的 Email 和 Phone Property
在 Person 上貼上
Email 和 Phone 從 PersonInfo 移轉至 Person 上去
在 Person 上進行資料表對應,如下圖所示,對應之後才刪除 PersonInfo,千萬不要先刪除 PersonInfo,要進行對應時會沒有 PersonInfo 選項可以選
執行測試
namespace MapEntityToTables
{
class Program
{
static void Main(string[] args)
{
using (var context = new EntitySplittingEntities())
{
context.Database.Log = Console.WriteLine;
var person = new Person
{
FirstName = "John",
LastName = "Doe",
Email = "john@example.com",
Phone = "555-555-5555"
};
context.Person.Add(person);
context.SaveChanges();
foreach (var item in context.Person)
{
Console.WriteLine(item.FirstName);
}
}
}
}
}
可以看見有兩段 Insert 語法產生
Select 資料時會自動進行 JOIN