我们正在尝试在遗留数据库上使用Entity Framework Code First(5.0),我们在涉及连接表的常见模式中存在一些问题。
例如,客户可以拥有多个地址,但地址表也用于其他类型的地址,因此有一个连接表可以将客户与其地址相关联: 客户 - >客户地址 - >地址。 联接表CustomerAdress具有customer-Id和address-Id。
在我们的模型中,我们只有一个Customer类和一个Address类,简化如下:
public class Customer
{
public long Id { get; set; }
public IList<Address> Addresses { get; set; }
}
public class Address
{
public long Id { get; set; }
}
我们使用以下代码在OnModelCreating中设置映射:
modelBuilder.Entity<Customer>()
.HasMany(o => o.Addresses)
.WithMany()
.Map(m =>
{
m.ToTable("CustomerAddress");
m.MapLeftKey("CustomerId");
m.MapRightKey("AddressId");
});
一切正常但是当我们尝试对Customer进行查询时,包含()地址结果sql看起来非常复杂,从具有多个连接的select中选择,并在添加这样的另一个关系之后,sql类爆炸的数量
如果手动编写sql用于此关系,我将使用从Customer到CustomerAddress的左外连接,然后使用从CustomerAddress到Address的连接。 有没有办法让Entity Framework为这个例子创建一个更简单的sql语句?