2009-12-07 24 views
5

Se voglio usare Linq-SQL devo anche trascinare la tabella DB sulla superficie del designer per creare le classi di entità.È possibile utilizzare Linq-SQL senza drag-and-drop?

Mi piace sempre il pieno controllo nella mia applicazione e non mi piacciono le classi create da dotnet.

È possibile fornire questa connessione tra Linq e il DB utilizzando le mie classi di entità di accesso ai dati personali?

Come posso fare?

risposta

7

È possibile scrivere le proprie classi in modo molto semplice utilizzando Linq-to-SQL: è sufficiente dipingere le classi con alcuni attributi.

Per esempio, questo è un tavolo molto semplice che ho in uno dei miei progetti, e funziona con LINQ to SQL bene:

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

Il codice è stato molto facile, soprattutto se si fanno i nomi delle proprietà si allineano con i nomi delle tabelle (non è necessario).

Poi basta un repository per la connessione al DB:

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

Naturalmente c'è di più ad esso, ma questo vi mostra le basi e non è difficile da fare una volta che hai capito bene. In questo modo hai il 100% di controllo sulle tue classi e puoi ancora trarre vantaggio da Linq-to-SQL.

Ho imparato questo approccio da Pro ASP.NET MVC Framework, un libro fantastico.

Se si desidera vedere di più, tutte le mie classi Linq-to-SQL sono state scritte da zero su uno dei miei progetti è possibile cercare here.

+0

non dimenticare 'using System.Data.Linq.Mapping;' – naspinski

+0

La risposta precedente stava parlando di "Persistenza ignoranza". Hai problemi con questo? – Tebo

+1

Possiamo scambiare gli e-mail? – Tebo

1

Per evitare di trascinare il codice & rilasciare è possibile dare un'occhiata a SqlMetal.exe.

Tuttavia, sembra che sei veramente chiedendo Persistenza ignoranza, e non sono sicuro che questo è possibile con L2S - certamente non è possibile con LINQ to Entities, fino .NET 4 ...

Una volta ho scritto un blog post on using SqlMetal.exe and subsequently modifying the generated schema - forse lo troverai utile, sebbene abbia una diversa motivazione di fondo.

+0

Grazie, ma sta provocando. – Tebo

+0

Per favore, cosa intendi per "Persistenza Ignoranza"? – Tebo

Problemi correlati