Subsonic N层亚音速3,脏列集合在更新时始终为空
这就是我正在做的,而不是为我工作 我有一个使用亚音速3 ActiveRecord模板生成的DAL,我有一个服务层(业务层,如果你愿意的话),它混合了外观和一些验证 假设我在服务层上有一个方法,比如publicvoidupdateclient(客户机); 在我的GUI中,我创建了一个客户机对象,用一些ID数据填充它并将其传递给服务方法,但这从未起作用,脏列集合(跟踪哪些列被更改以使用更高效的update语句)始终为空 如果我试图从GUI中的数据库获取对象,然后将其传递给服务方法,它也不会工作 我发现唯一可行的情况是,如果我从数据库中查询对象,并在同一个上下文中调用Update(),所有这些都在我的GUI中,这会破坏我创建的整个服务层 然而,对于插入和删除一切工作正常,我想知道这是否必须与对象跟踪做一些事情,但我知道的是亚音速不这样做 请给我一些建议。 谢谢Subsonic N层亚音速3,脏列集合在更新时始终为空,subsonic,subsonic3,data-access-layer,Subsonic,Subsonic3,Data Access Layer,这就是我正在做的,而不是为我工作 我有一个使用亚音速3 ActiveRecord模板生成的DAL,我有一个服务层(业务层,如果你愿意的话),它混合了外观和一些验证 假设我在服务层上有一个方法,比如publicvoidupdateclient(客户机); 在我的GUI中,我创建了一个客户机对象,用一些ID数据填充它并将其传递给服务方法,但这从未起作用,脏列集合(跟踪哪些列被更改以使用更高效的update语句)始终为空 如果我试图从GUI中的数据库获取对象,然后将其传递给服务方法,它也不会工作 我发
Adel.这似乎是一个功能,而不是一个bug。如果对象是从DB加载的,亚音速将仅将列标记为脏列。因此,您无法真正保存和删除对象,请添加对其属性的更改,然后再次保存。算了吧
bool _MyProp;
public bool MyProp
{
get { return _MyProp; }
set
{
if(_MyProp!=value){
_MyProp=value;
var col=tbl.Columns.SingleOrDefault(x=>x.Name=="MyProp");
if(col!=null){
if(!_dirtyColumns.Any(x=>x.Name==col.Name) && **_isLoaded**){
_dirtyColumns.Add(col);
}
}
OnChanged();
}
}
}
查看成员变量_isLoaded如何为false,除非对象确实是从DB加载的。亚音速从不将我的属性添加到脏列列表中
您的repository Save()方法必须如下所示:
public MyObject Save(Myobject myObject)
{
myObject.Save();
myObject= MyObject.SingleOrDefault(x => x.Id == myObject.Id);
return myObject;
}
而不是:
public MyObject Save(Myobject myObject)
{
myObject.Save();
myObject= MyObject.SingleOrDefault(x => x.Id == myObject.Id);
return myObject;
}
你可以做:
myObject.SetIsLoaded(true);
这样就不必再次查询数据库服务器
例如:
myObject.Save();
myObject.Name ="Something else";
myObject.SetIsLoaded(true);
myObject.Save();
您的GUI层是什么(winforms/xaml/webforms/mvc)?