2011-06-29 73 views
1

我有2個簡單的類:的EntityFramework在單表繼承IsDiscriminator問題

public abstract class Device 
{ 
    public int DeviceID { get; set; } 

    public string SerialNumber { get; set; } 

    [Column(IsDiscriminator = true)] 
    public int DeviceTypeID { get; set; } 
} 

public class SomeDevice : Device 
{ 
    public string SomeAdditionalInfo { get; set; } 
} 

所有存儲在一個表:

的DeviceID | SerialNumber | DeviceTypeID | SomeAdditionalInfo

但在應用我有一個異常而檢索數據:

Invalid column name 'Discriminator'. 

如果我改變列DeviceTypeID來鑑別比一切工作正常。爲什麼屬性IsDiscriminator = true會被忽略?

回答

1

您正在使用來自錯誤名稱空間的Column屬性 - 它是Linq-to-Sql的屬性。實體框架中的判別器從不映射爲屬性--EF將自動創建該列。所以,除非你使用現有的數據庫,否則你應該簡單地使用:

public abstract class Device 
{ 
    public int DeviceID { get; set; } 
    public string SerialNumber { get; set; } 
} 

在現有數據庫的情況下,你必須使用流利的API。在您的衍生背景下,將此添加到OnModelCreating

modelBuilder.Entity<Device>() 
      .Map<SomeDevice>(m => m.Requires("DeviceTypeID") 
            .HasValue(10)); 
+0

非常感謝! – urfin