有人知道EF Core是否在同一上下文中支持来自不同名称空间/程序集的两个具有相同名称的表?我有与here所述的非常相似的方案,EF 6.x不支持。谢谢。
答案 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类型。我们的项目如下:
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);
});
}
}
}