将多个数据库列映射到同一模型属性

时间:2019-05-13 16:41:26

标签: c# asp.net entity-framework-core

我正在使用Entity Framework Core和Fluent API进行ASP.NET Core(2.2)项目。 我想将两个表列(其中一个是主键)映射到一个模型属性。

让我们假设我们有一个名为 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 :(得分:0)

是否将其映射到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);
}