2011-04-28 98 views
7

我正在致力於一個簡單的命令行應用程序,教我自己在C#中的一些LINQ to SQL。我有一個SQL Server 2008實例,我試圖在MSDB中查找當前在SQL Server上設置的作業。我要輸出的作業名點和步驟名稱和實際的SQL語句來做到這一點是:LINQ to SQL關聯映射

use msdb 
go 

select j.name + '.' + s.step_name 
from sysjobs j 
join sysjobsteps s on j.job_id = s.job_id 
order by j.name 
go 

我在爲如何建立在C#SysJobs和SysJobSteps之間的關係的損失代碼和我不斷收到以下錯誤信息:

System.InvalidOperationException: Invalid association mapping for member 
'ServerCompare.Lib.Commands.SysJob.SysJobSteps'. 
'ServerCompare.Lib.Commands.SysJob' is not an entity. 

請指教是什麼做的最好方法?

+2

給我們一些linq-to-sql代碼! – Nix 2011-04-28 20:53:34

+0

我已經在C#中發佈了示例代碼,我試圖在這裏完成:https://gist.github.com/947347 – 2011-04-28 21:13:12

回答

18

這兩個表都必須有一個定義的主鍵。使用Column(Name="whatever_id", IsPrimaryKey=true)

+4

我很確定這是爲大多數人解決問題的答案。 – 2012-12-19 21:11:08

3

您需要首先創建一個DBML文件,加入這兩個表,然後用這樣的:

using (var context = new DataClasses1DataContext()) 
      { 
       var result = from s in context.sysjobs 
          orderby s.name 
          join sjs in context.sysjobsteps on s.job_id equals sjs.job_id 
          select new {Name = s.name + "." + sjs.step_name}; 

      } 

要創建具有系統表DBML,你需要做的創建連接,然後再右鍵單擊服務器 - >更改視圖 - >對象類型,您現在應該可以看到所有系統表。然後添加這兩個表。

+0

你將如何手動使用屬性? – 2011-04-28 21:54:23