我正在开发一个简单的命令行应用程序,用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.
请告知最佳方法是什么?
答案 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,首先需要创建连接,然后右键单击服务器 - >更改视图 - >对象类型,您现在应该看到所有系统表。然后添加两个表。