Свести сложный объект на объекте в БД - PullRequest
0 голосов
/ 08 октября 2018

Предположим, у меня есть следующие объекты:

Сущность:

public class MyEntity : NamedEntity
{
}

public abstract class NamedEntity : VersionedEntity
{
    public LocalizedText Name { get; set; }
}

Сложный объект (LocalizedText):

public class LocalizedText : ILocalized<string>
{
    protected LocalizedText()
    {
    }

    public LocalizedText(string en, string de = null, string fr = null)
    {
        En = en;
        De = de;
        Fr = fr;
    }

    public string En { get; set; }
    public string De { get; set; }
    public string Fr { get; set; }
}

С этим я получаю следующее исключение:

System.InvalidOperationException: 'The entity type 'LocalizedText' requires a primary key to be defined.'

Я не хочу делать сущность из LocalizedText, но хочу, чтобы она сохранялась в БД в столбцах таблицы MyEntity, например, Name_EN, Name_DE и Name_FR.

Как мне этого добиться?

1 Ответ

0 голосов
/ 08 октября 2018

Я нашел решение здесь https://blogs.msdn.microsoft.com/dotnet/2017/08/14/announcing-entity-framework-core-2-0/#owned-entities-and-table-splitting

Для приведенного выше кода я адаптировал мою DbContext реализацию с:

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<MyEntity>()
               .OwnsOne(r => r.Name);
    }

, что приводит к следующему CREATE (не имеет значениячасти, замаскированные в [...]):

CREATE TABLE [dbo].[MyEntity](
    [...]
    [Name_En] [nvarchar](max) NULL,
    [Name_De] [nvarchar](max) NULL,
    [Name_Fr] [nvarchar](max) NULL,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...