在多对多关系中映射另一个表
本文关键字:另一个 映射 关系 | 更新日期: 2023-09-27 18:32:43
我正在处理一个C#
项目,通过sqlmetal
工具自动生成的类查询Sql Db
。这工作正常。
我的问题是在我的数据库中,我必须具有many to many
关系的表(表A和表B(,因此,有一个名为TableATableB的第三个表,它仅保存表A和表B的主键。
因此,正如预期的那样,我的实体模型有一个名为 TableA 的类,该类具有一个名为 TableATableB 的属性,它是所有相关 TableATableB 行的集合。
这是自动生成的属性:
[global::System.Data.Linq.Mapping.AssociationAttribute(Name="FK_TableATableB_TableA", Storage="_TableATableB", ThisKey="Id", OtherKey="TableAId", DeleteRule="CASCADE")]
public EntitySet<TableATableB> TableATableB
{
get
{
return this._TableATableB;
}
set
{
this._TableATableB.Assign(value);
}
}
问题是我希望 TableA 有一个名为 TableB 的属性,它直接为我提供了所有相关 TableB 行的System.Data.EntitySet<TableB>
集合,有没有办法做到这一点?我一直在尝试这样做,但我还没有找到映射它的方法。
澄清一下,我知道解决方法可能如下,但我正在尝试看看是否有更好的方法。此外,这样我怎么知道何时将 TableB 对象添加到集合中以添加相应的 TableATableB 对象?
partial class TableA
{
public List<TableB> TableB
{
get
{
List<TableB> tableBRows = new List<TableB>();
foreach (TableATableB tAtB in this.TableATableB)
{
tableBRows.Add(tAtB.TableB);
}
return tableBRows;
}
set
{
// What to do here?
// I need to know when an element is added in order to add its respective
// TableATableB object
}
}
提前谢谢。
Linq to SQL 不支持您想要的行为。L2S 不支持隐式多对多集合(如 EF(。
实体框架可以,但要求多对多表(在本例中为 TableATableB(的所有字段构成该表的主键。 例如,如果 TableA 的主键是 Id,而 TableB 的主键是 Id,则 TableATableB 必须正好有两个字段,即 TableA_Id 和 TableB_Id,它们是该表的主键。 如果 TableATableB 在本例中具有三个字段(如 Id、TableA_Id 和 TableB_Id(,并且 Id 是多对多表的主键,则 EF 不能也不会将其视为隐式多对多集合。