我有一个包含现有数据库,模型和所有内容的工作项目。 我正在考虑使用EF6,但与此同时我想保留控制权。 而我的问题是,我无法解决以下问题。 我有这两个模型:
public class CMaster
{
public int Id { get; set; }
public string Title { get; set; }
public int DetailId { get; set; }
public string DetailName { get; set; }
}
public class CDetail
{
public int Id { get; set; }
public string Title { get; set; }
}
到目前为止,我有一个查询,如下:
SELECT
m.ID,
m.TITLE,
m.IDDETAIL DetailId,
(SELECT d.TITLE FROM DETAIL d
WHERE d.ID = m.IDDETAIL) DetailName
FROM MASTER m
使用此查询我运行了一个数据库来查询 Master ,并且只查询 Detail 表中的一条记录,该记录属于此 Master < / em>的
我使用的是Fluent API,我设置了类似的内容:
public class CMasterDetailsContext : DbContext
{
public CMasterDetailsContext(DbConnection existingConnection) : base(existingConnection, contextOwnsConnection: false)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("MYSCHEMA");
modelBuilder.Entity<CMaster>().ToTable("MASTER");
modelBuilder.Entity<CMaster>().HasKey(m => m.Id);
modelBuilder.Entity<CMaster>().Property(m => m.Id).HasColumnName("ID");
modelBuilder.Entity<CMaster>().Property(m => m.Title).HasColumnName("TITLE");
modelBuilder.Entity<CMaster>().Property(m => m.DetailId).HasColumnName("IDDETAIL");
modelBuilder.Entity<CMaster>().Ignore(m => m.DetailName);
modelBuilder.Entity<CDetail>().ToTable("DETAIL");
modelBuilder.Entity<CDetail>().HasKey(d => d.Id);
modelBuilder.Entity<CDetail>().Property(d => d.Id).HasColumnName("ID");
modelBuilder.Entity<CDetail>().Property(d => d.Title).HasColumnName("TITLE");
base.OnModelCreating(modelBuilder);
}
public DbSet<CMaster> MasterEntries { get; set; }
public DbSet<CDetail> DetailEntries { get; set; }
}
我以为我应该能够将 Detail 表的一个属性(Title)映射到中 Master 表的一个属性(DetailName) OnModelCreating 方法。 我找到了HasComputedColumnSql,但它只存在于EF Core中。
然后我尝试了它:
var oMasterEntriesFromLinqJoin = Enumerable.Join(oContext.MasterEntries, oContext.DetailEntries, m => m.DetailId, d => d.Id, (master, detail) =>
{
master.DetailName = detail.Title;
return master;
});
但在这种情况下,EF会加载整个 Details 表,然后进行连接。这意味着两个数据库运行,并且在第一个数据库中将加载整个 Details 表,这是我想要避免的。 有没有(优雅的)解决方案?