2014-04-02 31 views
1

在一個簡單的TPH繼承結構的微風模型中,我無法弄清楚如何正確地創建一個新的子類型的微風實體。如何創建派生類的Breeze實體?

例如:

public class Vehicle 
{ 
    public string Name { get; set; } 
    public byte VehicleType { get; set; } 
} 

public class Car : Vehicle 
{ 
    // Some extra properties 
} 

鑑別不符合使用一個字符串值,以確定一個類的父,所以我們使用一些EF FluentAPI修改元數據的標準實體框架的做法:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Vehicle>() 
       .Map<Car>(m => m.Requires("VehicleType").HasValue((byte)1)); 
} 

以下代碼的默認行爲似乎在Breeze中創建了合適的實體,但鑑別器值從未設置,因此將更改保存到服務器會導致類型爲Vehicle而不是Car的對象持久化。

var group = breezeManager.createEntity("Car", { 
    Name: 'My car' 
    // If the line below is omitted, VehicleType is saved 
    // to the server with a value of 0 
    ,VehicleType: 1 
}); 
breezeManager.saveChanges(); 

雖然這似乎是一個關於微風的客戶端組件的行爲問題,這可能是相關的,我們正在使用微風來存儲到未通過實體框架訪問的數據庫(我們只需爲Breeze生成EF元數據即可使用)。

我不認爲客戶端代碼應該擔心我們的繼承鑑別器的實現,所以希望在我們創建每個對象時可以手動設置值。

正確存儲鑑別器值的最佳方法是什麼?

回答

3

我能夠驗證TPH與字節鑑別值的作品。我注意到我的模型和你的模型之間唯一的區別是我沒有在我的指定字節屬性。

public abstract class Airplane 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    //public byte AirplaneType { get; set; } //Not required 
} 

public class Boeing : Airplane 
{ 
    public string Model { get; set; } 
} 

在Fluent API中指定鑑別器足以讓EF保存正確的值。

+0

謝謝。沒有意識到這是可選的,但沒有它,如你所建議的那樣,一切都很完美。 – Luckyrat