Как создать внешние ключи к таблицам, сгенерированным из перечислений? - PullRequest
0 голосов
/ 12 сентября 2018

Я создал таблицу поиска на основе перечислений, в значительной степени основанную на этом предложении: Как создать таблицу, соответствующую перечислению в 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
}
...