2016-02-25 6 views
5

У меня есть класс, который содержит некоторые свойства. По некоторым архитектурным причинам у меня есть экземпляр другого объекта в моем классе.EF Core плавное отображение внутренних свойств объекта

Простой пример

public class MyEntity { 
    public MySubEntity SubEntity {get; set;} 
} 

Для этого я создаю свободно картирование как:

builder.ToTable(MyEntity.CONST_TABLE_NAME); 
builder.HasKey(m => m.Id); 
builder.Property(m => m.Column1).IsRequired(); 
builder.Property(m => m.SubEntity.Column2).IsRequired(); 

Я не могу интегрировать все свои свойства subEntity в моей основной сущности (мой subEntity имеет свой собственный интеллект). Я просто хочу сопоставить свои свойства subentity, которые НЕ хранятся в отдельной таблице, в таблице myEntity.

Последняя строка сгенерирует исключение:

The expression 'm => m.SubEntity.Column2' is not a valid property expression. The expression should represent a property access: 't => t.MyProperty'. 

Как я могу выполнить такое отображение?

ответ

3

EF Core пока не поддерживает этот тип отображения. Она не будет поддерживаться в EF ядра 1.0 RTM (см мой GitHub вопрос: https://github.com/aspnet/Home/issues/1330)

Как я описал в моем GitHub вопрос, я понял, 2 решения:

1) Создать производный класс от моей модели, специально разработанный для EF, и обеспечивает все свойства как простые. Он понадобится больше сопоставления при вставке/обновлении и извлечении из Db. Мы не выбираем этот вариант.

2) Создайте свойства прокси. В моем примере это как:

public class MyEntity { 
    private MySubEntity SubEntity {get; set;} 
    public string SubEntityValue 
    { 
    get 
    { 
     return SubEntity.Value; 
    } 
    set 
    { 
     SubEntity.Value = value; 
    } 
} 

Это кажется лучшим решением (мы выбираем этот вариант).

Смежные вопросы