linq to sql与外键的关联问题

时间:2011-05-29 22:31:33

标签: linq linq-to-sql foreign-key-relationship

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

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

1 个答案:

答案 0 :(得分:0)

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