强制HasMany()使用关联表
本文关键字:关联 HasMany 强制 | 更新日期: 2023-09-27 18:26:33
这里的第一个问题,即使我已经浏览堆栈好几年了。
我在实体框架和迁移方面有问题,更确切地说是在映射方面。我很清楚关于多对多、一对多、关联表之类的所有问题,但我还没有找到这个特定问题的解决方案:
这些是我的POCO:
public class A
{
public virtual long Id {get; set;}
public virtual ICollection<B> B {get; set;}
}
public class B
{
public virtual long Id {get; set;}
// Not relevant stuff ...
}
我想强制映射给我一个关联表,可能看起来像这样:
----------- ----------- -----------
| TABLE A | | TABLE AB| | TABLE B |
----------- ----------- -----------
| ID | | FK_A_ID | | ID |
----------- | FK_B_ID | -----------
-----------
我的第一反应是使用这种映射:
modelBuilder.Entity<A>()
.HasMany(x => x.B)
.WithMany()
.Map(x =>
{
x.ToTable("AB");
x.MapLeftKey("Id");
x.MapRightKey("Id");
});
不幸的是,这并没有在数据库中为我提供所需的映射,因为它在表a中创建了一个引用B.Id的外键。此外,我不希望在B类中的a上有属性。有关信息,目标数据库为SqlServer。
有合适的方法吗?
注意:我不是以英语为母语的人,如果我犯了错误,请原谅我。
不确定为什么要尝试实现这一点,但这是可能的。
在我脑海中出现的低形是,你不能编辑A
或B
,但你想要很多关系。。。所以这是一个解决方案:
只需创建一个id为A
和B
的类AB
,然后用装饰符定义密钥和鉴别器
class AB {
virtual public A ALink {get; set;}
[Key, Column(Order = 0)]
public int ALinkId {get; set;}
virtual public B BLink {get; set;}
[Key, Column(Order = 1)]
public it BLinkId {get; set;}
}