2009-07-21 10 views
2

私はSubsonicを初めとしており、LINQテンプレートクラスを使用してCRUD操作を行う自然な方法を見つけることはできないようです。私は、あなたはできる、ActiveRecordの中で推測:LINQTemplateを使用して亜音速3、どのようにLinqTemplatesを使用してCRUD?

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

は、私は同じことを行うことができますどのように、しかし、クラスを生成しましたか?私は以下のようなものを使って商品オブジェクトを挿入することができます:

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

私は親切にいくつかのヒントを教えていただけますか?私は本当にそれを感謝します。

+0

+1。私はこの同じことをすべての朝から理解しようとしてきました。私はなぜこれが組み込まれておらず、やりやすいのかわかりません。 ActiveRecordは、Linqのものがはるかに完全であるようです。 – CodingWithSpike

答えて

2

すべてのCRUDはSubSonicRepositoryで発生します。これはあなたが派生することができます。たとえば、次のようなクラスがあります。

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

などです。 1つの場所にすべてのデータアクセス方法を統合できるのですばらしいことです。もしあなたがSprocsを持っていれば、DB上のメソッドとしても生成されます。

私が時間を割いたら、SubSonicRepositoryに直接Saveメソッドを追加する作業をしていますので、自分でチェックする必要はなく、呼び出すメソッド(AddまたはUpdate)を確認する必要はありません。

0

私が含まれるようにClasses.ttファイルを変更した:

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

は近く、右上部に

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

/// <summary> 

間の線の束を挿入します名前空間の宣言は、私のファイルの行18に挿入することができます。

最後に行うべきことは、System.Linqステートメントの次の行である10行目に別の "using"ステートメントを追加することです。

using System.Linq; 
using SubSonic.Repository; 

このようにすると、基本的な機能にアクセスできるリポジトリが生成されますが、別の部分クラスで変更することができます。

希望に役立ちます。

関連する問題