2010-12-07 51 views
0

我儘快拿到了例外,我叫分配的SubmitChanges()
的ID是有效的,並已經在數據庫中創建
「FirstLevelReprotDataSource」是指「ReportDataSource」
所有數據來自相同的datacontextLINQ例外:「INSERT語句與FOREIGN KEY約束衝突」,害怕關係!

alt text

GroupingDataMember gdm = new GroupingDataMember(); 
gdm.DataMemberID = 87; 
gdm.FirstLevelDataSourceID = 61; 
gdm.CreatedBy = ""; 
gdm.CreationDate = DateTime.Now; 
SelectedReportDataSource.FirstLevelReportDataSource.GroupingDataMembers.Add(gdm); 

INSERT語句與 FOREIGN KEY約束衝突 「FK_GroupingField_ReportDataSource」衝突。 衝突發生在數據庫 「HumanResourcesDocumentManagement」, 表「dbo.ReportDataSource」,列 'ID'。該聲明已被終止 。

有什麼建議嗎?所有的

[Association(Name="ReportDataSource_GroupingDataMember", Storage="_FirstLevelReportDataSource", ThisKey="FirstLevelDataSourceID", OtherKey="ID", IsForeignKey=true)] 
public ReportDataSource FirstLevelReportDataSource 
{ 
    get 
    { 
     return this._FirstLevelReportDataSource.Entity; 
    } 
    set 
    { 
    ReportDataSource previousValue = this._FirstLevelReportDataSource.Entity; 
    if (((previousValue != value) 
       || (this._FirstLevelReportDataSource.HasLoadedOrAssignedValue == false))) 
    { 
     this.SendPropertyChanging(); 
     if ((previousValue != null)) 
     { 
      this._FirstLevelReportDataSource.Entity = null; 
      previousValue.GroupingDataMembers.Remove(this); 
     } 
     this._FirstLevelReportDataSource.Entity = value; 
     if ((value != null)) 
     { 
      value.GroupingDataMembers.Add(this); 
      this._FirstLevelDataSourceID = value.ID; 
     } 
     else 
     { 
      this._FirstLevelDataSourceID = default(int); 
     } 
     this.SendPropertyChanged("FirstLevelReportDataSource"); 
    } 
    } 
} 
+0

你確定在'ReportDataSource`表中有'ID` 61的記錄嗎?你也可以在你的問題中包含外鍵約束的create語句引用錯誤嗎? – David 2010-12-07 13:54:29

+0

你是要求從後端或DBML端創建外鍵嗎?無論如何,我編輯,包括DBML版本 – 2010-12-07 14:11:42

回答

0

首先,由於您呼叫SelectedReportDataSource.FirstLevelReportDataSource.GroupingDataMembers.Add(GDM),則不需要設置gdm.FirstLevelDataSourceID = 61。新增需要設置ID的照顧。

其次,儘量避免按值設置ID字段。通過說entity.ForeignKeyProperty = dataContext.ForeignKeyTableObjects.SingleOrDefault(o => o.ID.Equals(50));最好使用外鍵。或任何身份證件。這樣你將一個對象綁定到實體,而不是實體字段的ID。

第三,確保這些ID存在於db-87,61等中,並檢查是否需要gdm.ReportDataSource。如果是這樣,你不會把它放在上面。這可能會導致失敗。

0

由於您在示例中顯式設置了標識,爲什麼不直接將創建的對象添加到上下文的GroupingDataMember表中,然後將更改提交到數據庫?無論哪種情況,都要看看LINQ生成的SQL,以更好地瞭解數據庫上實際發生的情況。

-m

相關問題