2009-12-07 9 views
5

Si quiero usar Linq-SQL también tengo que arrastrar la tabla DB a la superficie del diseñador para crear las clases de entidad.¿Es posible usar Linq-SQL sin arrastrar y soltar?

Siempre me gusta el control total en mi aplicación y no me gustan las clases creadas por dotnet.

¿Es posible proporcionar esta conexión entre Linq y la base de datos utilizando mis propias clases de entidad de capa de acceso a datos?

¿Cómo puedo hacerlo?

Respuesta

7

Puede escribir sus propias clases muy fácilmente utilizando Linq-to-SQL; solo consiste en pintar sus clases con algunos Atributos.

Por ejemplo, esta es una tabla muy simple que tengo en uno de mis proyectos, y funciona con LINQ to SQL bien:

[Table(Name = "Categories")] 
public class Category : IDataErrorInfo 
{ 
    [Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)] 
    public int Id { get; set; } 
    [Column] public string Name { get; set; } 
    [Column] public string ExtensionString { get; set; } 
} 

El código era muy fácil, especialmente si usted hace sus nombres de propiedad se alinean con los nombres de su tabla (no es necesario).

continuación, sólo tiene un repositorio para conectarse a la base de datos:

class CategoryRepository : ICategoryRepository 
{ 
    private Table<Category> categoryTable; 
    public CategoryRepository(string connectionString) 
    { 
     categoryTable = (new DataContext(connectionString)).GetTable<Category>(); 
    } 
} 

Por supuesto que es más que eso, pero esto muestra los conceptos básicos y no es difícil de hacer, una vez que lo entiendes. De esta forma, tiene el 100% de control sobre sus clases y aún puede aprovechar Linq-to-SQL.

Aprendí este enfoque de Pro ASP.NET MVC Framework, un libro impresionante.

Si desea ver más, todas mis clases de Linq-to-SQL se escribieron desde cero en uno de mis proyectos, puede navegar here.

+0

no olvides 'using System.Data.Linq.Mapping;' – naspinski

+0

La respuesta anterior hablaba de "Ignorancia de persistencia". ¿Tienes problemas con eso? – Tebo

+1

¿Podemos intercambiar correos electrónicos adicionales? – Tebo

1

Para evitar el arrastre & soltar puede echar un vistazo a SqlMetal.exe.

Sin embargo, suena como si realmente están solicitando ignorancia de la persistencia, y no estoy seguro de que esto es posible con L2S - ciertamente no es posible con LINQ a Entidades .NET hasta 4 ...

Una vez escribí un blog post on using SqlMetal.exe and subsequently modifying the generated schema, quizás lo encuentre útil, aunque tiene una motivación subyacente diferente.

+0

Gracias, pero está provocando. – Tebo

+0

Por favor, ¿qué quiere decir con "Ignorancia de persistencia"? – Tebo