2009-07-21 10 views
2

Ich bin neu bei Subsonic, und es scheint, dass ich einen natürlichen Weg nicht finden kann, CRUD-Operationen mit den LINQ-Template-Klassen zu machen. Ich denke, in Active, man konnte:Subsonic 3, wie CRUD mit LinqTemplates?

Product p = new Product(); 
p.ProductCode = "xxx"; 
p.Add(); 

Mit der LINQTemplate Klassen erzeugt jedoch, wie kann ich das gleiche tun? Ich kann nur so etwas verwenden, um ein Produkt-Objekt einzufügen:

db.Insert.Into<UnleashedSaaS.PRODUCT>(prod => prod.Code, prod => prod.Description).Values("Product1", "Product1 Desc").Execute(); 

Wer könnte mir bitte ein paar Tipps geben? Ich würde es wirklich schätzen.

+0

+1. Ich habe den ganzen Morgen versucht, das Gleiche herauszufinden. Ich verstehe nicht, warum das nicht eingebaut und einfach zu machen ist. Es scheint, dass ActiveRecord viel vollständiger ist als das Linq-Zeug. – CodingWithSpike

Antwort

2

Alle CRUD passiert in SubSonicRepository, die Sie ableiten können. Zum Beispiel hätte ich eine Klasse wie folgt:

public class ProductRepository : SubSonicRepository<Product> { 

    public ProductRepository() : base(new NorthwindDB()) { } 

    // need this here because base doesn't expose the DB class that I know of 
    protected NorthwindDB _db; 
    protected NorthwindDB DB { 
     get { 
      if (_db == null) _db = new NorthwindDB(); 
      return _db; 
     } 
    } 

    public void Save(Product product) { 
     if (product.ProductId == 0) { 
      Add(product); // Add is part of SubSonicRepository 
     } else { 
      Update(product); 
     } 
    } 

    public void Delete(Product product) { ... } 

    public List<Product> ListAll() { 
     var products = from p in DB.Products 
         select p; 

     return products.ToList(); 
    } 

    public Product GetById(int id) { 
     return DB.GetByKey(id); 
    } 
} 

Und so weiter. Es ist schön, weil Sie alle Ihre Datenzugriffsmethoden an einem Ort konsolidieren können. Wenn Sie Sprocs haben, werden sie auch als Methoden in der DB generiert.

Wenn ich Zeit bekomme, werde ich daran arbeiten, direkt eine Save-Methode zu SubSonicRepository hinzuzufügen, so dass Sie nicht selbst überprüfen müssen, welche Methode (Add oder Update) Sie aufrufen möchten.

0

Ich habe die Classes.tt-Datei aufgenommen werden geändert:

public partial class <#=tbl.ClassName#>Repository : SubSonicRepository<<#=tbl.ClassName#>> 
    { 
     public <#=tbl.ClassName#>Repository() : base(new <#=DatabaseName#>DB()) { } 
    } 

dass Bündel von Linien Legen Sie zwischen

<# foreach(Table tbl in tables){#> 

und

/// <summary> 

ganz oben, in der Nähe der Namespace-Deklaration, in meiner Datei kann es in Zeile 18 eingefügt werden.

Das letzte, was zu tun ist, fügen Sie eine andere Anweisung "using" in Zeile 10, die nächste Zeile nach System.Linq-Anweisung. Nun sollte es so aussehen:

using System.Linq; 
using SubSonic.Repository; 

dass ein Repository generieren wird, um Sie zu grundlegenden Funktionen zugreifen, können aber in einer anderen Teilklasse geändert werden.

Hoffnung, das hilft.