【问题标题】:Map multiple DB columns to the same model attribute将多个数据库列映射到同一个模型属性
【发布时间】:2019-05-15 21:24:48
【问题描述】:

我正在使用 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");
    }
}

上述方法不起作用。 有没有办法实现这个功能?

【问题讨论】:

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


【解决方案1】:

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);
}

【讨论】:

  • 这种映射是什么?没见过
  • 这只是普通的旧 OOP / C#
  • 这应该执行字符串连接,对吧?我不想要这种行为。我希望它们具有相同的价值
猜你喜欢
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 2015-01-11
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多