2009-04-23 41 views
2

我是linq的新手,我試圖編寫更新語句。這是在linq中插入關係的正確方法

我有兩個表,tblProject和tblPage。這兩個通過tblPage中的外鍵鏈接。

於是試圖到的tblpage創建行這一點,日INQ查詢時,我有

public void CreatePage(int projectId, string pageName, DateTime createdDate, int createdBy, DateTime updatedDate, int updatedBy) 
    { 
     using (EverythingEngineEntities db = new EverythingEngineEntities()) 
     { 
      Page page = new Page(); 
      page.Project = db.ProjectSet.Single(p => p.ProjectId == projectId); 
      page.LastUpdatedBy = updatedBy; 
      page.LastUpdatedDate = updatedDate; 
      page.CreatedBy = createdBy; 
      page.CreatedDate = createdDate; 
      page.PageName = pageName; 
     } 
    } 

我想知道這是通過LINQ插入一行到實體的正確途徑。

很抱歉,如果這一切都不是有道理的:)

編輯:

我格外有興趣,如果這條線是正確的做法

page.Project = db.ProjectSet.Single(p => p.ProjectId == projectId); 

回答

3

您幾乎已經完成......你不得不實際插入它(你已經創建了它,這是第1步)。

的代碼是一樣的東西:

db.Pages.InsertOnSubmit(page); 
db.SubmitChanges(); 

我知道這是LINQ to SQL的語法有...但EF是八九不離十。

編輯:我很接近......對EF它

db.Pages.Add(page); 

EDIT2:對了,我忘了提,你不打服務器,如果你正在做的事情像上面那樣簡單。我敢肯定,你可以做這樣的事情在EF:

page.Project.ProjectID = projectID; 

所以你不必下載「db.ProjectSet.Single」只是爲了重新插入。

+0

對不起,那只是我作爲鬆弛,而不是將它添加代碼:S – 2009-04-23 13:07:01

0

我認爲你的方式是正確的,但你的方式會創建一個額外的電話。

可以更換

page.Project = db.ProjectSet.Single(p => p.ProjectId == projectId); 


page.ProjectReference.EntityKey = new EntityKey("EverythingEngineEntities.Project", "ProjectID", projectId); 

Read this

相關問題