另一个新手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对象,这看起来很浪费。
这是推荐的方法还是我应该尝试重用单个数据库对象 - 如果是这样,最简单的方法是什么?
答案 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();