Frage

Ich habe gerade angefangen, Linq to SQL zu verwenden, und frage mich, ob jemand Best Practices für die Verwaltung von DBML-Dateien mit anderen teilen kann.

  • Wie halten Sie sie mit der Datenbank auf dem neuesten Stand?
  • Haben Sie eine einzige DBML-Datei für die gesamte Datenbank oder ist sie in mehrere logische Einheiten aufgeteilt?
  • Wie funktioniert die Verwaltung dieser Datei in einer Teamumgebung?

Weitere Tipps und Tricks willkommen.

War es hilfreich?

Lösung

Hast Du Dir angesehen SqlMetal?Es wird offiziell unterstützt, obwohl es nicht allzu sehr beworben wird.Sie können es verwenden, um DBMLs über die Befehlszeile zu erstellen – wir haben es als Teil der kontinuierlichen Integrationsaktualisierungen einer Datenbank verwendet (stellen Sie jedoch sicher, dass Sie eine wirklich gute Codetrennung haben, wenn Sie dies tun – Teilklassen sind eine Rettung – wie die DBML erhalten wird). überschrieben).

Wenn ich mich richtig erinnere, verfügt es nicht ganz über die gleichen Funktionen wie der Modelldesigner in Visual Studio (ich denke, er handhabt die Pluralisierung anders).Da ist ein Guter Beitrag dazu auf Ben Halls Blog.

Andere Tipps

Die Tatsache, dass der L2S-Designer die Synchronisierung mit der Datenbankstruktur nicht unterstützt, stellt meiner Meinung nach eine große Einschränkung dar.Es ist jedoch ein Add-In verfügbar, das einige Neusynchronisierungsfunktionen bietet:

http://www.huagati.com/dbmltools/

Leider ist es nicht mehr kostenlos.

Da Sie nach weiteren Tipps und Tricks zum Verwalten von DBML gefragt haben ...

Wenn DBML-Dateien aus der Datenbank aktualisiert werden, werden bestimmte Schemaeinstellungen nicht berücksichtigt, z. B. Standardspaltenwerte, sodass Sie die Einstellung manuell ändern müssen.Dies kann dazu führen, dass jedes Mal Stunden verloren gehen, wenn Sie die DBML aktualisieren, ohne zu erkennen oder sich daran zu erinnern, wo Sie manuelle Anpassungen vornehmen müssen, und Ihr Code beginnt auszufallen.

Um dem vorzubeugen, besteht ein Trick darin, einen Komponententest zu schreiben, der mithilfe von Reflektion die LINQ-Metadaten für diese (manuellen) Einstellungen überprüft.Wenn der Test fehlschlägt, wird eine beschreibende Fehlermeldung ausgegeben, die den Benutzer anweist, die entsprechenden Änderungen an den Spalteneigenschaften vorzunehmen.Dies ist keine perfekte Lösung und möglicherweise auch nicht praktisch, wenn Sie viele manuelle Einstellungen vornehmen, aber es kann Ihnen und Ihrem Team dabei helfen, größere Probleme zu vermeiden.

Hier ist ein Beispiel für einen Nunit-Test, um zu überprüfen, ob eine Spalte so eingestellt ist, dass sie automatisch aus der Datenbank generiert wird.

    [Test]
    public void TestMetaData()
    {
        MyObj my_obj = new MyObj()
        {
            Foo = "bar",
        };

        Type type = MyObj.GetType();
        PropertyInfo prop = type.GetProperty("UpdatedOn");
        IEnumerable<ColumnAttribute> info = (IEnumerable<ColumnAttribute>)prop.GetCustomAttributes(typeof(ColumnAttribute), true);
        Assert.IsTrue(
            info.Any<ColumnAttribute>(x => x.IsDbGenerated == true), 
            "The DBML file needs to have MyObj.UpdatedOn AutoGenerated == true set. This must be done manually if the DBML for this table gets refreshed from the database."
        );
    }

PLINQO ist eine Reihe von Codegenerierungsvorlagen, die LINQ to SQL generieren.Es unterstützt die Synchronisierung mit der Datenbank und die Aufteilung von Entitäten in mehrere Klassen sowie viele andere Funktionen, die die Verwendung von LINQ to SQL vereinfachen.

Schauen Sie sich die PLINQO-Website unter an http://www.plinqo.com sowie die Einführungsvideos.

Hier ist ein Link, der gute Informationen zu Best Practices für LINQ to SQL bietet

http://www.a2zmenu.com/LINQ/LINQ%20to%20SQL%20Best%20Practice.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top