0

我能够立即运行活动记录。入门说明非常棒,我很快就构建了一个 Web 服务,可以让我在现有数据库中创建和读取小部件。太棒了。但是,当涉及到更新时,事情就崩溃了。我会在客户端编辑对象并将其发送回服务,但是当服务保存它时,它只会创建一个新对象。我推断这意味着我需要重新查询数据库并分配从客户端发送到服务的值,但我的老板说这会很麻烦,并且存储库模式会更好,因为可以使用 pocos。不幸的是,这就是我得到的指导的范围。所以这是我的问题。

  1. t4 模板是否仅适用于活动记录,或者它们也会为您建立简单的存储库。例如,是否有什么东西也会产生我的 pocos 或者它们都是“你自己的”?

  2. 有人看过亚音速 3 层解决方案的工作示例吗?我读过它们,但有没有任何样品漂浮在周围?

活动记录样本/截屏视频非常容易理解,因为它们从我开始的同一点开始。简单的存储库似乎更多地关注迁移和其他高级功能,而且这些东西对我来说是新的,我知道的不够多,无法连接这些点。

啊。没有什么比有一个截止日期来学习一些东西并在本周末运行它更合适的了。任何建议都会受到欢迎,即使它是带有指向我应该阅读的手册链接的 rtfm。

提前致谢

4

1 回答 1

0

如果您想使用存储库模式,您可以使用linq 模板或使用不需要任何 t4 模板的简单存储库。

使用简单的存储库,您可以自己创建 pocos。如果您选择,Subsonic 可以为您创建或更新数据库方案:

var repository=new SimpleRepository(SimpleRepositoryOptions.RunMigrations);

但如果你问我,我会自己选择SimpleRepositoryOptions.None和更新数据库。

无论如何,您最初使用 ActiveRecord 模板的问题可以很容易地解决。我建议您的 ActiveRecord 对象在客户端序列化并在服务器上反序列化。

ActiveRecord 对象的默认构造函数调用 Init 函数,如下所示:

    void Init(){
        TestMode=this._db.DataProvider.ConnectionString.Equals("test", StringComparison.InvariantCultureIgnoreCase);
        _dirtyColumns=new List<IColumn>();
        if(TestMode){
            <#=tbl.ClassName#>.SetTestRepo();
            _repo=_testRepo;
        }else{
            _repo = new SubSonicRepository<<#=tbl.ClassName#>>(_db);
        }
        tbl=_repo.GetTable();
        SetIsNew(true);
        OnCreated();       

    }

如您所见,内部存储库已创建并SetIsNew(true)执行。您唯一需要做的就是myitem.SetIsNew(false)在对象被反序列化值填充后调用。我想这足以告诉 subsonic 在保存期间进行更新查询。

于 2011-01-29T13:21:53.200 回答