【问题标题】:Subsonic 3, how to CRUD using LinqTemplates?Subsonic 3,如何使用 LinqTemplates 进行 CRUD?
【发布时间】:2009-08-05 12:30:16
【问题描述】:

我是 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();

谁能给我一些提示?我真的很感激。

【问题讨论】:

  • +1。我整个早上都在试图弄清楚同样的事情。我不明白为什么这不是内置的并且不容易做到。看起来 ActiveRecord 比 Linq 的东西更完整。

标签: subsonic subsonic3


【解决方案1】:

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

等等。这很好,因为您可以将所有数据访问方法整合到一个地方。如果您有 Sproc,它们也会作为 DB 上的方法生成。

当我有时间时,我将直接向 SubSonicRepository 添加一个 Save 方法,这样您就不必自己检查要调用哪个方法(添加或更新)。

【讨论】:

    【解决方案2】:

    我已修改 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 行。

    最后要做的是在第 10 行,System.Linq 语句之后的下一行添加另一个“using”语句。现在应该是这样的:

    using System.Linq;
    using SubSonic.Repository;
    

    这将生成一个存储库,让您可以访问基本功能,但可以在另一个部分类中进行修改。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多