2011-05-29 136 views
4

我有兩個簡單的表和一個很大的問題與外鍵:LINQ to 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 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(); 
} 

的外鍵的問題下面的過程結果 - 子記錄與值0添加在「SaleId」 (FK)專欄。父記錄正確添加並且SaleId主鍵獲取其自動生成的值。我能做些什麼來根據新插入的父項的值自動設置子對象中的SaleId字段?

+0

同樣的問題在這裏。這在WP7.8上。我已經嘗試首先提交父對象(即您的案例中的Sale對象),然後添加子對象並執行另一次提交。沒有不同。子對象的外鍵值仍然爲零。 – 2013-04-13 12:37:49

回答

0

在這裏,我們傾向於首先提交父代,儘管通過嵌套事務您可能能夠獲得自動主鍵並仍然保持故障回滾行爲。