在子声波中重用数据库对象

时间:2010-03-01 01:01:41

标签: subsonic subsonic3 subsonic-active-record

另一个新手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对象,这看起来很浪费。

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

2 个答案:

答案 0 :(得分:0)

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

但是,我不太确定你应该打扰。这取决于那些施工人员伤害你的程度。

答案 1 :(得分:0)

在我看来,将多个对象分配给单个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();

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

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

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();