![](/img/trans.png)
[英]How to to handle abstract base class in entity framework(code first)?
[英]How to map abstract class using entity code first and State Pattern
我正在嘗試使用 Entity Framwork 4.1、Code First 和 Fluent API 映射一個實體。 我的場景是我正在使用抽象類實現狀態模式。 看我的實現:
//我的合同
public abstract class SaleStatus
{
public int IdSaleStatus { get; set; }
public string Description { get; set; }
public abstract void ChangeTo(Sale sale, SaleStatus saleStatus);
}
public class SaleStatusBooked : SaleStatus
{
public SaleStatusBooked()
{
this.IdSaleStatus = 1;
Description = "Reservado";
}
public override void ChangeTo(Sale sale, SaleStatus newStatus)
{
if (!(newStatus is SaleStatusPaid) || (!(newStatus is SaleStatusTimeOut)))
throw new BusinessException("salestatus");
sale.SetStatus(newStatus);
}
}
public class SaleStatusPaid : SaleStatus
{
public SaleStatusPaid()
{
this.IdSaleStatus = 2;
Description = "Pago";
}
public override void ChangeTo(Sale sale, SaleStatus newStatus)
{
if (!(newStatus is SaleStatusCancelled) || (!(newStatus is SaleStatusNotResolved)) || (!(newStatus is SaleStatusCriticalError)))
throw new BusinessException("salestatus");
sale.SetStatus(newStatus);
}
}
現在,我當前的 SaleStatus 映射:
public class SaleStatusMap: EntityTypeConfiguration<SaleStatus>
{
public SaleStatusMap()
{
ToTable("SaleStatus");
HasKey(ss => ss.IdSaleStatus);
Map<SaleStatusBooked>(pk => pk.Requires("IdSaleStatus").HasValue(1));
Map<SaleStatusPaid>(pk => pk.Requires("IdSaleStatus").HasValue(2));
}
}
當我運行我的項目時,我收到了這條消息:
指定的架構無效。 錯誤:(107,6):錯誤 0075:關鍵部分:SaleStatus 類型的“IdSaleStatus”無效。 鍵的所有部分都必須不可為空。
任何人都可以幫助我嗎?
謝謝,
最好的祝福。
米歇爾·馬加良斯
您正在嘗試使用主鍵列作為鑒別器。 這不受支持。 EF 不允許您將鑒別器列映射為屬性(當您保存新的派生類型時,EF 在內部分配正確的鑒別器值)
您可以做的是在SaleStatus
表中創建另一列來存儲鑒別器值。
public class SaleStatusMap: EntityTypeConfiguration<SaleStatus>
{
public SaleStatusMap()
{
ToTable("SaleStatus");
HasKey(ss => ss.IdSaleStatus);
Map<SaleStatusBooked>(pk => pk.Requires("StatusType").HasValue(1));
Map<SaleStatusPaid>(pk => pk.Requires("StatusType").HasValue(2));
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.