我觉得这个问题很傻,但我从来没有做过这样的事情而且我被困住了。
我很高兴在传统设计上工作,有一些"陷阱"这里和那里。其中之一是两个表之间不正确定义的多对多关系。它是这样的:
Id,Number
编号
NumberOfA,IdOfB
所以要用SQL加入它,就必须做这样的事情:
SELECT A.*, B.*
FROM A
JOIN AToB ON AToB.NUmberOfA = A.Number
JOIN B ON AToB.IdOfB = B.Id
是的,我知道。这是一个糟糕的设计。我应该尽快改变它。我会的。但就目前而言,我需要为基于EF的原型提供快速而肮脏的解决方案。这显然不起作用
public class A
{
public long Id {get; set;}
public string Name {get; set;}
}
public class B
{
public long Id {get; set;}
}
...
internal class BConfiguration : EntityTypeConfiguration<B>
{
this.ToTable("B")
.HasKey(t => t.Id);
...
internal class AConfiguration : EntityTypeConfiguration<A>
{
this.ToTable("A")
.HasKey(t => t.Id);
this.HasMany<B>(t => t.EntitiesOfB)
.WithMany(t => t.EntitiesOfA)
.Map(m =>
{
m.MapLeftKey("IdOfB");
m.MapRightKey("NumberOfA");
m.ToTable("AToB");
});
因为它希望 AToB 的映射在两端引用A和B的主键列,而我希望它使用 AToB.NumberOfA = A.Number 相反,但仅限于此特定映射。在关系中使用表格 A 的所有其他映射应该仍然可以使用它正确定义的 Id 键列。
是否存在针对此类情况的EF6 FluentAPI解决方案?