5 Stimmen

Ist es möglich, Linq-SQL ohne Drag-and-Drop zu verwenden?

Wenn ich Linq-SQL verwenden möchte, muss ich auch die DB-Tabelle auf die Designeroberfläche ziehen, um die Entitätsklassen zu erstellen.

Ich möchte immer die volle Kontrolle über meine Anwendung haben und mag die von dotnet erstellten Klassen nicht.

Ist es möglich, diese Verbindung zwischen Linq und die DB mit meinem eigenen Data Access Layer Entity-Klassen bereitzustellen?

Wie kann ich das erledigen?

7voto

naspinski Punkte 33080

Mit Linq-to-SQL können Sie ganz einfach Ihre eigenen Klassen schreiben - Sie müssen nur Ihre Klassen mit einigen Attributen versehen.

Zum Beispiel ist dies eine sehr einfache Tabelle, die ich in einem meiner Projekte habe, und es funktioniert mit Linq-to-SQL einfach gut:

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

Der Code war sehr einfach, vor allem, wenn Sie Ihre Eigenschaftsnamen mit den Tabellennamen übereinstimmen lassen (das müssen Sie nicht).

Dann brauchen Sie nur noch ein Repository, um sich mit der DB zu verbinden:

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

Natürlich gibt es noch mehr, aber dies zeigt Ihnen die Grundlagen und es ist nicht schwer, wenn Sie es einmal verstanden haben. Auf diese Weise haben Sie 100 % Kontrolle über Ihre Klassen und können trotzdem die Vorteile von Linq-to-SQL nutzen.

Ich habe diesen Ansatz von Pro ASP.NET MVC-Framework ein großartiges Buch.

Wenn Sie mehr sehen wollen, alle meine Linq-to-SQL-Klassen wurden von Grund auf in einem meiner Projekte geschrieben, die Sie durchsuchen können ici .

1voto

Mark Seemann Punkte 216836

Um Drag & Drop zu vermeiden, können Sie einen Blick werfen auf SqlMetal.exe .

Es hört sich jedoch so an, als ob Sie wirklich Persistenz-Ignoranz wünschen, und ich bin mir nicht sicher, ob dies mit L2S möglich ist - mit LINQ to Entities ist es bis .NET 4 sicherlich nicht möglich...

Ich schrieb einmal einen Blogbeitrag über die Verwendung von SqlMetal.exe und die anschließende Änderung des generierten Schemas - Vielleicht finden Sie sie nützlich, auch wenn sie eine andere Motivation hat.

1voto

Abby Fichtner Punkte 2548

Ich habe ein paar Tutorials auf CodeProject, die durch gehen, wie dies zu tun, einschließlich, wie man die Beziehungen (M:M, 1:M, M:1) in einer OO-Weise zu behandeln und halten sie synchron, wie Sie Updates machen:

Ein LINQ-Tutorial: Tabellen auf Objekte abbilden

Ein LINQ-Tutorial: Hinzufügen/Aktualisieren/Löschen von Daten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X