2

私はSubsonicを初めて使用しますが、LINQテンプレートクラスを使用してCRUD操作を行う自然な方法を見つけることができないようです。ActiveRecordでは、次のことができると思います。

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

ただし、LINQTemplateで生成されたクラスを使用すると、同じことをどのように行うことができますか?以下のようなものを使用して、製品オブジェクトを挿入することしかできません。

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

誰が親切に私にいくつかのヒントを与えることができますか?本当にありがたいです。

4

2 に答える 2

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 のメソッドとしても生成されます。

時間ができたら、Save メソッドを SubSonicRepository に直接追加する作業を行います。そのため、どのメソッド (Add または Update) を呼び出すかを自分で確認する必要はありません。

于 2009-07-22T04:25:30.037 に答える
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;

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

それが役立つことを願っています。

于 2009-08-05T03:48:24.400 に答える