Я пытаюсь сопоставить сущность, используя 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: ключ
Часть: 'IdSaleStatus' для типа SaleStatus недопустима. Все части
ключ должен быть не обнуляемым.
Кто-нибудь может мне помочь?
Спасибо
С наилучшими пожеланиями.
Мишель Магальес