Дозвуковой 3, как CRUD, используя LinqTemplates? - PullRequest
2 голосов
/ 22 июля 2009

Я новичок в Subsonic, и мне кажется, что я не могу найти естественный способ выполнения CRUD-операций с использованием шаблонных классов LINQ. Я думаю, в 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();

Кто мог бы любезно дать мне несколько советов? Я действительно ценю это.

Ответы [ 2 ]

2 голосов
/ 22 июля 2009

Все 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);
    }
}

И так далее. Это хорошо, потому что вы можете объединить все свои методы доступа к данным в одном месте. Если у вас есть Sprocs, они также генерируются как методы в БД.

Когда у меня будет время, я собираюсь добавить метод Save непосредственно в SubSonicRepository, чтобы вам не приходилось проверять, какой метод (Add или Update) вызывать.

0 голосов
/ 05 августа 2009

Я изменил файл 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.

Последнее, что нужно сделать, это добавить еще один оператор using в строку 10, следующую после оператора System.Linq. Теперь это должно выглядеть так:

using System.Linq;
using SubSonic.Repository;

Это создаст хранилище для предоставления вам доступа к основным функциям, но может быть изменено в другом частичном классе.

Надеюсь, это поможет.

...