2014-12-19 23 views
3

我有一個來自外部DLL的複雜對象(我無法更改此對象的代碼)。如何從外部DLL保存複雜的對象?

以此類爲例,該類沒有標識幷包含其他複雜類。

public class Car : IVehicle 
{ 
    public IWheel Wheel { get; set; } 
    public IEngine Engine { get; set; } 
    public Car(IWheel wheel, IEngine engine) 
    { 
     Wheel = wheel; 
     Engine = engine; 
    } 
} 

如何使用實體框架代碼優先保存此對象?

+2

您不能直接保存它,您將不得不將其映射到您的DbContext知道的等效實體類。 – 2014-12-19 10:04:10

+0

我正確地理解我應該在存儲庫中製作CarDTO,並將Car從Car轉移到CarDTO並將CarDTO保存爲沒有Car,並且這種方法沒有其他選擇嗎? – user45245 2014-12-19 10:15:02

+0

你爲什麼堅持從第三方程序集使用這個類?即使有可能,這也是錯誤的,允許基於你無法控制的類型創建數據庫對象。 – 2014-12-19 11:21:04

回答

0

不幸的是,EntityFramework不支持複雜類型以外的主鍵。

但是你不一定需要建立從第三部分庫這些的DTO的對象的DTO和轉換,它足以創建一個子類,如CarEntity然後id屬性添加到它:

class Car 
{ 
    public string Name { get; set; } 
} 

class CarEntity : Car 
{ 
    public int Id { get; set; } 
} 

實體框架將正確映射這個層次結構一個表,查看所需的遷移步驟:

CreateTable(
    "dbo.CarEntities", 
    c => new 
     { 
      Id = c.Int(nullable: false, identity: true), 
      Name = c.String(), 
     }) 
    .PrimaryKey(t => t.Id); 

這樣你就可以存儲這些實體與最小的額外工作和第三方庫的功能重用他們將期待汽車t ypes作爲輸入等。