一、什么是復(fù)雜類(lèi)型?
書(shū)中說(shuō)道:“復(fù)雜類(lèi)型也可視作值類(lèi)型(?)可以作為附加屬性添加到其他類(lèi)。復(fù)雜類(lèi)型與實(shí)體類(lèi)型的區(qū)別在于復(fù)雜類(lèi)型沒(méi)有其自己的鍵。它是依賴(lài)于其"宿主"類(lèi)型跟蹤變化 和持久化。一個(gè)沒(méi)有Key屬性的類(lèi)型,并且作為屬性映射到一個(gè)或多個(gè)類(lèi)型中,Code First就會(huì)將其視作為復(fù)雜類(lèi)型。Code First將預(yù)設(shè)復(fù)雜類(lèi)型的屬性出現(xiàn)在宿主類(lèi)型映射到數(shù)據(jù)庫(kù)的表中?!?/p>
說(shuō)簡(jiǎn)單一點(diǎn)就是,項(xiàng)目中有個(gè)類(lèi)A,這個(gè)A,會(huì)被其他類(lèi)引用到比如:實(shí)體類(lèi)B 和 實(shí)體類(lèi)C,但是建立數(shù)據(jù)庫(kù)的時(shí)候,我們不想為這個(gè)分割類(lèi)A建立表,而是把A類(lèi)中的屬性等建立到 B 和 C 映射的表中,這時(shí)候,我們管 A 叫做復(fù)雜類(lèi)型。
二、復(fù)雜類(lèi)型和實(shí)體類(lèi)型的區(qū)別
首先還是定義兩個(gè)類(lèi)Person類(lèi)和IDCard類(lèi)還有數(shù)據(jù)庫(kù)上下文。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Data.Entity;using EFCodeFirstModels;using System.Configuration;namespace EFCodeFirstDataAccess { public class EFCodeFirstDbContext:DbContext { public EFCodeFirstDbContext() : base("MyStrConn") { } public DbSet<Pe