2011-12-05 75 views
2

我有問題,在Code First中使用TPH將POCO對象的覆蓋屬性映射到數據庫。Code First無法映射覆蓋屬性

我的代碼相似,這些類:

public abstract class Vehicle 
{ 
    public int ID { get; set; } 
    public abstract NumberOfWheels { get; set;} 
} 

public class Motorbike: Vehicle 
{ 
    public override NumberOfWheels { get; set; } 
} 

當我嘗試保存摩托車類數據庫,我得到了一個消息

屬性「NumberOfWheels」不是一個聲明的屬性在型號 '摩托車'。通過使用Ignore方法或NotMappedAttribute數據註釋驗證該屬性是否未從模型明確排除 。確保它是一個有效的基本屬性。

看起來好像代碼優先不能映射覆蓋屬性。有沒有任何建議如何映射覆蓋屬性與代碼第一?

由於

回答

-1

的問題不是在重寫屬性,但在一個基類定義屬性作爲abstract。相反,在基類中使用virtual屬性,它應該可以工作。

+0

我嘗試使用虛擬和錯誤是相同的。 –

+0

這對我來說也不適用 – spot

1

基類中的屬性是否具有[NotMapped]屬性?這可能導致派生類不把它的屬性值保存到相應的數據庫表中。在這種情況下,您將需要重寫的屬性可以將值轉發到的另一個屬性。

public partial class BaseClass 
{ 
    [NotMapped] 
    public virtual int SequenceNumber { get; set; } 

} 


[Table("TABLE_TEST", Schema = "dbo")] 
public partial class DerivedClass : BaseClass 
{ 

    public override int SequenceNumber 
    { 
     get 
     { 
      return this.SeqNumField; 
     } 
     set 
     { 
      this.SeqNumField = value; 
     } 
    } 

    // This is the property pointing to the real database column 
    [Column(TypeName = "int"), Required] 
    public int SeqNumField { get; set; } 


}