来自相同上下文中不同名称空间的同名表

时间:2018-07-03 19:42:42

标签: entity-framework-core

有人知道EF Core是否在同一上下文中支持来自不同名称空间/程序集的两个具有相同名称的表?我有与here所述的非常相似的方案,EF 6.x不支持。谢谢。

2 个答案:

答案 0 :(得分:0)

据我所知。就我个人而言,我将有两个上下文,即std和custom(使用您的示例)。 std使用person,custom使用customperson类,但是在您的代码中仍引用相同的表名。

public DbSet<person> Persons { get; set; }

-或-

public DbSet<customperson> Persons { get; set; }

您的大多数代码都将保持不变,即

myContext.Persons.FirstOrDefault(a => a.Id == myId);

,并且仅在要映射或需要“额外”字段的地方使用自定义代码。

var person = myContext.Persons.FirstOrDefault(a => a.Id == myId);
if (person != null && person.HasProperty("myfield"))
    // reference myfield
endif

答案 1 :(得分:0)

我们找到了Microsoft documentation中所述的具有继承性的解决方案。 有一个示例显示了一个简单的继承方案,并使用逐层表格模式将数据存储在关系数据库表中。 Discriminator列标识每行中存储哪种Blog类型。我们的项目如下:

enter image description here

BaseContext.cs

content: '\f0b0'

ExtendedContext.cs

using Microsoft.EntityFrameworkCore;
namespace Base.Data
{
public partial class BaseContext : DbContext
{
    public BaseContext()
    {
    }

    public BaseContext(DbContextOptions<BaseContext> options)
        : base(options)
    {
    }

    public virtual DbSet<Tab1> Tab1 { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
            optionsBuilder.UseSqlServer("Server=.\\SQLEXPRESS2017;Database=base;Trusted_Connection=True;");
        }
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Tab1>(entity =>
        {
            entity.Property(e => e.Id)
                .HasColumnType("numeric(18, 0)")
                .ValueGeneratedOnAdd();

            entity.Property(e => e.Col1).HasMaxLength(50);
        });
    }
}
}