LINQ to SQL关联映射

时间:2011-04-28 20:47:54

标签: c# .net sql-server linq linq-to-sql

我正在开发一个简单的命令行应用程序,用C#教自己一些LINQ to SQL。我有一个SQL Server 2008实例,我试图在MSDB中查找当前在SQL Server上设置的作业。我想输出一个点的作业名称和步骤名称以及要执行的实际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 个答案:

答案 0 :(得分:18)

两个表都必须具有已定义的主键。使用Column(Name="whatever_id", IsPrimaryKey=true)

答案 1 :(得分: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,首先需要创建连接,然后右键单击服务器 - >更改视图 - >对象类型,您现在应该看到所有系统表。然后添加两个表。