我正在开展一个C#
项目,通过Sql Db
工具通过自动生成的类查询sqlmetal
。这很好。
我的问题是,在我的数据库中,我必须有表{(em> TableA 和 TableB ),这些表有many to many
的关系,因此,有第三个表名为 TableATableB ,仅包含 TableA 和 TableB 的主键。
因此,正如预期的那样,我的EntityModel有一个名为 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 的属性,它直接为我提供了所有相关的System.Data.EntitySet<TableB>
集合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
}
}
提前致谢。
答案 0 :(得分:1)
Linq to SQL不支持您想要的行为。 L2S不支持隐含的多个集合,如EF。
实体框架确实如此,但要求多个表的所有字段(在您的情况下为TableATableB)构成该表的主键。例如,如果TableA的主键是Id而TableB的主键是Id,那么TableATableB必须恰好有两个字段TableA_Id和TableB_Id,它们是该表的主键。如果TableATableB在这种情况下有三个字段,如Id,TableA_Id和TableB_Id,并且Id是许多表的主键,则EF不能也不会将其视为隐式多数集合。