linq到sql的外键关联问题



我有两个简单的表和一个外键的大问题:

  • 销售(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字段?

在这里,我们倾向于首先提交父级,尽管通过嵌套事务,您可能能够获得自动主键,并且仍然维护故障回滚行为。

相关内容

  • 没有找到相关文章

最新更新