2017-01-06 7 views
0

Мы создаем контекст с несколькими объектами. Все объекты построены на абстрактном классе с идентификатором (guid).Entity framework - виртуальная таблица для нескольких объектов (сначала код)

Мы хотим, чтобы все сущности имели отношение к общей таблице журналов, однако не могут получить EFCF для понимания отношений из-за именования.

public class Log { 
    public BaseEntity Entity {get;set;} 
    public Guid EntityID {get;set;} 
} 

public class Example : BaseEntity { 
    public virtual ICollection<Log> Logs {get;set;} 
} 

Может ли кто-нибудь помочь по шаблону, который поддерживает? Мы попытались абстрагироваться, настроив OnModelCreating и т. Д., Но продолжаем получать нечеткие ошибки из-за не поддерживаемого именования. Если мы добавим их;

[ForeignKey("EntityID")] 
public Example Example {get;set;} 
[ForeignKey("EntityID")] 
public Example5 Example5 {get;set;} 
[ForeignKey("EntityID")] 
public Example2 Example2 {get;set;} 

набор свойств в классе журнала, все работает нормально. Проблема возникает при добавлении новой записи журнала.

+0

Что вы будете делать при создании журнала? Вы пытались использовать его как BaseEntity? И, возможно, значение типа, чтобы вы могли вручную вернуться к вашему типу? – MiltoxBeyond

+0

Или вы можете сделать его просто геттером на основе GUID? – MiltoxBeyond

+0

Подумайте логично. Можете ли вы сделать такой FK в реляционной базе данных? –

ответ

0

Я бы сделал возможным и работающее решение, абстрагировав общие поля в базовый класс.

Использование MapInheritedProperties() в модели здании (и последующие)

modelBuilder.Entity<Models.Example>().Map(x => x.MapInheritedProperties()); 

modelBuilder.Entity<Models.Log>() 
    .HasRequired(x => x.BaseEntity) 
    .WithMany(x => x.Logs) 
    .Map(x => 
    { 
     x.ToTable("Example"); 
     x.MapKey(new[] { "ID" }); 
    }) 
    .WillCascadeOnDelete(false); 

теперь я могу назначить «виртуальную» таблицу любого лица, до тех пор, как они вытекают из базового класса.