Сопоставить несколько столбцов БД с одним и тем же атрибутом модели - PullRequest
0 голосов
/ 13 мая 2019

Я работаю над проектом ASP.NET Core (2.2) с использованием Entity Framework Core и Fluent API.Я хотел бы сопоставить два столбца таблицы (один из которых является первичным ключом) с одним атрибутом модели.

Предположим, что у нас есть таблица с именем sample_table состоит из столбцов:

|---------------------|------------------|------------------|
|      Column1_PK     |     Column2      |     Column3      |
|---------------------|------------------|------------------|

Я хотел бы отобразить поле модели на несколько столбцов.Я догадался, что могу вложить несколько HasColumnName, как в примере ниже:

public class MyContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        builder.Entity<MyModel>().ToTable("sample_table");
        builder.Entity<MyModel>()
            .HasKey(m => m.MyId);
        builder.Entity<MyModel>()
            .Property(m => m.MyId)
            .HasColumnName("Column1_PK")
            .HasColumnName("Column2"); // I would like to map the Column1_PK and Column2 to m.MyId
        builder.Entity<MyModel>()
            .Property(m => m.OtherColumn)
            .HasColumnName("Column3");
    }
}

Подход, описанный выше, не работает.Есть ли способ достичь этой функциональности?

1 Ответ

0 голосов
/ 14 мая 2019

Будет ли отображение в классе MyModel работать?

public class MyModel
{
    public string MyId
    {
        get
        {
            if (Column1_PK != Column2)
            {
                // TODO: handle if values are not equal
            }
            else
            {
                return Column1_PK;
            }
        }
        set
        {
            Column1_PK = value;
            Column2 = value;
        }
    }
    public string Column1_PK { get; private set; }
    public string Column2 { get; private set; }
}


protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<MyModel>()
        .HasKey(m => m.Column1_PK); // this seems to be the actual PK based on my understanding

    builder.Entity<MyModel>()
        .Ignore(m => m.MyId);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...