【问题标题】:Getting Started With Subsonic Repository for a 3 tier app3 层应用程序的 Subsonic 存储库入门
【发布时间】:2011-01-27 20:03:58
【问题描述】:

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

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

  2. 有没有人见过亚音速 3 层的工作示例 解决方案?我读过他们,但是 有没有漂浮的样品 周围?

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

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

提前致谢

【问题讨论】:

    标签: subsonic simplerepository


    【解决方案1】:

    如果您想使用存储库模式,您可以使用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)。我想这足以告诉 subsonic 在保存期间进行更新查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多