Я создал таблицу поиска на основе перечислений, в значительной степени основанную на этом предложении: Как создать таблицу, соответствующую перечислению в EF6 Code First?
Теперь моя проблема в том, чтоЯ не могу настроить внешний ключ для MyEntity.OrderType для таблицы OrderType.
Для большего контекста это мои типы:
public enum OrderTypeEnum
{
Buy = 1, Sell = 2
}
public class OrderType : EntityEnumAdapterBase<OrderTypeEnum>
{
// this base class implements Id, Name and Description properties as can be seen here:
// https://stackoverflow.com/questions/34557574/how-to-create-a-table-corresponding-to-enum-in-ef6-code-first/34558339#34558339
}
public partial class MyEntity
{
[Required]
public OrderType Type { get; set; } // stored as int using a value conversion
}
Теперь, когда генерируется схема базы данных для MyEntityотсутствует ограничение внешнего ключа от MyEntity.Type
до OrdeType.Id
. Как мне этого добиться?
То, что я до сих пор пробовал, добавляло свойство navigaion в MyEntity следующим образом:
public class OrderType : EntityEnumAdapterBase<OrderTypeEnum>
{
public IList<MyEntity> MyEntities { get; set; }
}
Затем настройте его таким образом вOnModelCreating(ModelBuilder modelBuilder)
modelBuilder.Entity<MyEntity>()
.HasOne(bc => bc.Type)``
.WithMany(c => c.MyEntities)
.HasForeignKey(bc => bc.TypeId);
Это невозможно с сообщением: «Тип» нельзя использовать в качестве свойства для типа объекта «MyEntity», поскольку он настроен как навигация.
Итак, как мне заняться добавлением ограничений FK в таблицы, сгенерированные из перечислений?Упомянутый подход также кажется немного многословным, поскольку мне пришлось добавить MyEntity.TypeId
(типа int) и OrderType.MyEntities.
В идеале на MyEntity
Я бы даже не хотел иметь OrderType
,а вместо этого OrderTypeEnum
вместо этого:
public partial class MyEntity
{
[Required]
public OrderTypeEnum Type { get; set; } // stored as int using a value conversion
}