用于3层应用程序的Subsonic Repository入门

时间:2011-01-27 20:03:58

标签: subsonic simplerepository

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

  1. t4模板是否仅适用于活动记录或是否可以构建 为您准备简单的存储库 太。例如,有什么东西吗? 也会产生我的pocos或是他们 所有'滚动你自己'?

  2. 有没有人见过亚音阶3级的工作示例 解?我读过他们但是 有漂浮的样品吗? 围绕?

  3. 活跃的唱片样本/截屏视频非常容易理解,因为它们始于我开始时的同一点。简单的存储库似乎更侧重于迁移和其他高级功能,并且这些东西对我来说是新的,我不知道连接点。

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

    提前致谢

1 个答案:

答案 0 :(得分:0)

如果要使用存储库模式,可以使用linq templates或使用不需要任何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)。我想这足以告诉亚音速在保存期间进行更新查询。