2011-04-28 17 views
7

Estoy trabajando en una aplicación de línea de comandos simple para enseñarme algunos LINQ to SQL en C#. Tengo una instancia de SQL Server 2008 y estoy tratando de buscar en MSDB los trabajos actualmente configurados en SQL Server. Deseo emitir el nombre del trabajo de un punto y el nombre Paso y la instrucción SQL real de hacerlo es la siguiente:Asociación LINQ a SQL Asignación

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 

Estoy en una pérdida para la forma de establecer la relación entre sysjobs y sysjobsteps en el C# código y sigo recibiendo el siguiente mensaje de error:

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

Por favor, indique cuál es la mejor manera de hacerlo?

+2

¡denos un código de linq-a-sql! – Nix

+0

He publicado código de ejemplo en C# de lo que estoy tratando de lograr aquí: https://gist.github.com/947347 –

Respuesta

18

Ambas tablas deben tener una clave principal definida. Use Column(Name="whatever_id", IsPrimaryKey=true)

+4

Estoy bastante seguro de que esta es la respuesta que resolverá el problema para la mayoría de las personas. –

3

Es necesario crear un archivo dbml en primer lugar, la adición de esas dos tablas y luego usar algo como esto:

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}; 

      } 

Para crear un dbml con las tablas del sistema que necesita hacer crear una conexión en primer lugar, a continuación, derecha haga clic en el servidor -> cambiar vista -> tipo de objeto, ahora debería ver todas las tablas del sistema. Luego agrega las dos tablas.

+0

¿Cómo lo harías manualmente con atributos? –