我有两个简单的表和外键的一个大问题:
这是一个非常基本的一对多父母与孩子的关系。当然还有一些其他领域,但它们是无关的,因为它们没有在关系中使用,所以我没有将它们包含在列表中。
我将表格映射到我的代码中的类:
[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字段?
答案 0 :(得分:0)
在这里,我们倾向于首先提交父级,尽管通过嵌套事务,您可能能够获得自动主键并仍然保持故障回滚行为。