¿Es posible utilizar Linq-SQL sin drag and drop?

Si quiero usar Linq-SQL, también tengo que arrastrar la tabla DB a la superficie del diseñador para crear las classs de entidad.

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

¿Es posible proporcionar esta connection entre Linq y la database usando mis propias classs de entidad de capa de acceso a datos?

¿Cómo puedo hacerlo?

Puedes escribir tus propias classs muy fácilmente usando Linq-to-SQL, solo consiste en pintar tus classs con algunos Atributos.

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

[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 fue muy fácil, especialmente si haces que tus nombres de propiedad se alineen con los nombres de tu tabla (no es necesario).

Entonces solo necesitas un Repositorio para conectarte al DB:

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

Por supuesto que hay más, pero esto te 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 classs y aún puede aprovechar Linq-to-SQL.

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

Si desea ver más, todas mis classs Linq-to-SQL se escribieron desde cero en uno de mis proyectos que puede search aquí .

Para evitar drag and drop, puede echar un vistazo a SqlMetal.exe .

Sin embargo, parece que realmente está solicitando persistencia de ignorancia, y no estoy seguro de que esto sea posible con L2S, ciertamente no es posible con LINQ a entidades hasta .NET 4 …

Una vez escribí una publicación de blog sobre el uso de SqlMetal.exe y posteriormente modifiqué el esquema generado , quizás lo encuentre útil, aunque tiene una motivación subyacente diferente.

Tengo un par de tutoriales en CodeProject que explican cómo hacerlo, incluso cómo manejar las relaciones (M: M, 1: M, M: 1) de manera OO y mantenerlos sincronizados a medida que realizas actualizaciones :

Un tutorial LINQ: Mapeo de tablas a objects

Un tutorial de LINQ: Agregar / actualizar / borrar datos