我有两个简单的表和一个外键的大问题:
- 销售(SaleID int PK身份)
- SaleDetail(SaleDetailId int PK身份,SaleID int FK)
这是一种非常基本的一对多亲子关系。当然还有一些其他字段,但它们是不相关的,因为它们没有在关系中使用,所以我没有将它们包括在列表中。
我将表映射到代码中的类:
[Table()]
public class Sale
{
[Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)]
public int SaleId
{
get;
set;
}
private EntitySet<SaleDetail> saleDetails = new EntitySet<SaleDetail>();
[Association(OtherKey = "SaleId", Storage = "saleDetails")]
public EntitySet<SaleDetail> SaleDetails
{
get
{
return this.saleDetails;
}
set
{
this.saleDetails.Assign(value);
}
}
另一个:
[Table()]
public class SaleDetail
{
[Column(IsPrimaryKey=true, IsDbGenerated=true, UpdateCheck=UpdateCheck.Never)]
public int SaleDetailId
{
get;
set;
}
[Column()]
public int SaleId
{
get;
set;
}
然后我尝试创建一个新的Sale并添加几个子对象。
Sale s = new Sale();
s.SaleDetails.Add(new SaleDetail());
s.SaleDetails.Add(new SaleDetail());
在最后一步中,我尝试添加新对象:
using (DataContext dc = new DataContext(Database.ConnectionString))
{
var sales = dc.GetTable<Sale>();
sales.InsertOnSubmit(s);
dc.SubmitChanges();
}
以下过程会导致外键问题-在"SaleId"(FK)列中添加值为0的子记录。父记录被正确添加,并且SaleId主键获得其自动生成的值。如何根据新插入的父对象的值在子对象中自动设置SaleId字段?
在这里,我们倾向于首先提交父级,尽管通过嵌套事务,您可能能够获得自动主键,并且仍然维护故障回滚行为。