【问题标题】:Re-use of database object in sub-sonic在亚音速中重用数据库对象
【发布时间】:2010-03-01 01:01:40
【问题描述】:

又一个新手 SubSonic/ActiveRecord 问题。假设我想插入几条记录,目前我正在这样做:

using (var scope = new System.Transactions.TransactionScope())
{
    // Insert company
    company c = new company();
    c.name = "ACME";
    c.Save();

    // Insert some options
    company_option o = new company_option();
    o.name = "ColorScheme";
    o.value = "Red";
    o.company_id = c.company_id;
    o.Save();
    o = new company_option();
    o.name = "PreferredMode";
    o.value = "Fast";
    o.company_id = c.company_id;
    o.Save();

    scope.Complete();
}

然而,单步执行这段代码时,每个 company/company_option 构造函数都会启动并创建一个新的 myappDB 对象,这看起来很浪费。

这是推荐的方法还是我应该尝试重用单个 DB 对象 - 如果是,最简单的方法是什么?

【问题讨论】:

    标签: subsonic subsonic3 subsonic-active-record


    【解决方案1】:

    我相信您可以通过将其IsNew 属性设置为true 来使用相同的对象,然后更改其数据属性,再次保存,重复。很简单。

    不过,我不太确定您是否应该打扰。这取决于那些构造函数对你的伤害有多严重。

    【讨论】:

      【解决方案2】:

      在我看来,将多个对象分配给单个 var 绝不是一个好主意,但这是有争议的。我会这样做:

      // Insert some options
      company_option o1 = new company_option();
      o1.name = "ColorScheme";
      o1.value = "Red";
      o1.company_id = c.company_id;
      o1.Save();
      
      company_option o2 = new company_option();
      o2.name = "PreferredMode";
      o2.value = "Fast";
      o2.company_id = c.company_id;
      o2.Save();
      

      您担心性能问题,除非您想一次插入或更新许多对象,否则这应该不是问题。同样,在这种情况下,用于插入数据的时间比创建对象的时间要长。

      如果您担心性能,您可以使用插入查询完全跳过对象创建和保存部分:

      http://www.subsonicproject.com/docs/Linq_Inserts

         db.Insert.Into<company_option>(
           x => x.name, 
           x => x.value,
           x => x.company_id)
          .Values(
              "ColorScheme",
              "Red",
              c.company_id
          ).Execute();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多