- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
问题:当 SubSonic 对象通过 Windows Communication Foundation 服务来回发送时,如何保留它们的“脏”?
即:
我有一个返回 SubSonic (2.2) 对象集合的 WCF 服务调用,如下所示:
// WCF server side
public MyObjectCollection GetAllMyObjects()
{
// Retrieve a MyObjectCollection (SubSonic-generated class) from the DB
return DB.Select().From<MyObject>.ExecuteAsCollection<MyObjectCollection>();
}
另一个让客户保存它们:
// WCF server side
public void SaveAllMyObjects(MyObjectCollection objs)
{
objs.SaveAll();
}
在 WCF 客户端,我检索这个集合(通过生成的 WCF 代理),我修改它的一些成员,然后我保存它:
// WCF client side
MyObject[] allObjects = myWcfClient.GetAllMyObjects();
allObjects[3].SomeProperty = "Some other value";
myWcfClient.SaveAllMyObjects(allObjects);
但是,SubSonic 的“objs.SaveAll()”调用不会保存任何内容,因为它没有“意识到”objs[3] 已被修改,即没有人翻转“脏”位在那个专栏上。
这是我正在实现的反模式,还是一种明智的做事方式?如果是这样,我如何说服 SubSonic 在我的对象通过 WCF 线时将它们标记为脏?
最佳答案
我找到了一个解决方案,但感觉很老套,如果能由比我更了解 SubSonic 的人来审查它会很棒。我的想法是,在保存 MyObjectCollection 的服务器端代码中,我会创建与传入的一样多的新 MyObject 实例,设置正确的主键,让 SubSonic 相信它们只是从数据库加载,从旧对象填充新对象,然后保存新集合.所以上面的方法看起来像这样:
// WCF server side
public void SaveAllMyObjects(MyObjectCollection objs)
{
MyObjectCollection fakeColl = new MyObjectCollection();
foreach (var oneObj in objs)
{
var oneFakeObj = new MyObject();
oneFakeObj.Id = oneObj.Id; // Primary key
// Pretend oneFakeObj was just loaded from the DB
oneFakeObj.IsNew = False;
oneFakeObj.IsLoaded = True;
// Copy all column values
foreach (var col in MyObject.Schema.Columns)
{
oneFakeObj.SetColumnValue(col.ColumnName, oneObj.GetColumnValue(col.ColumnName));
}
fakeColl.Add(oneFakeObj);
}
fakeColl.SaveAll();
}
关于c# - 使用 WCF 往返 SubSonic DAL 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1496577/
我有一个 SQL Server 函数,它返回一个标量 BIT 值并采用一个参数。下面给你一个想法: CREATE FUNCTION dbo.[fnTest] (@StringToTest VARCHA
我知道这个问题看起来很主观,但它真的很简单。作为 SubSonic 的长期用户和兼职贡献者,我对社区认为改进它的最佳方法很感兴趣。 那么你有什么看法,你会如何让 SubSonic 变得更好?哪一件事会
编辑:现在有一个 doc page在这一点上,这个问题是无关紧要的,也已经过时了。阅读文档而不是这个问题。 我已经玩了一个月左右的 SubSonic 3 代码生成,我很想从其他人那里得到一些关于他们使
我正在试用新的 SubSonic 3 预览版,但我不确定我应该在我的 MVC 项目中用于基本 CRUD 操作的模式。 我试图在我的模型中保留尽可能多的数据逻辑,所以我向每个模型的部分类添加了一些静态
我一直在探索 Sub Sonic 3 的 SimpleRepository 并且对它非常满意,但对交易有疑问。我知道使用像“AddMany”和“DeleteMany”这样的方法将在单个事务中自动执行所
我正在使用 Subsonic 的 SimpleRepository,我正在尝试编写一些单元测试,这样它们就不会触及数据库,但我无法弄清楚 SimpleRepository 是否可以针对内存列表工作(比
有人在 Mono 上部署过 SubSonic 吗? 最佳答案 可能是用户 - 在问题的混合中,有人说他在单声道下运行它以及您需要采取的步骤 http://forums.subsonicproject.
我想添加基本日志记录并对 SubSonic 2.1 生成的类进行一些其他细微更改(我没有使用 SubSonic 3.0 t4 模板)。 有没有办法在不修改 SubSonic 源代码的情况下做到这一点?
我一直在使用 SubSonic.Query,直到有一天我不能通过添加 WHERE 来做“IS NULL”,然后我意识到 SubSonic.SqlQuery 存在并且它有一个函数“IsNull()” ”
最新版本的 Subsonic 是否与 Visual Studio 2010/.Net 4.0 兼容? 最佳答案 我已经在 Visual Studio 2010 和 .net 4 的测试版中使用了版本
有什么方法可以在 SubSonic 3.0 中访问我的 SQL View ?代码生成似乎完全跳过了 View 最佳答案 在项目中包含 View 只需打开 SQLServer.ttinclude 查找加
我想在我的项目中使用 subsonic 3.0 SimpleRepository,但是有一个问题: 如果我的表名像 产品 等然后我无法从数据库中获取任何数据, 因为 subsonic 会生成像“Sel
保存记录后如何立即获取记录 ID(主键)?我有自动生成的 ID 列。在保存该对象之前,我需要将 ID 作为“外键”传递给另一个对象。 目前我这样做 Product.Save() 我不能吗 int id
最新版本的 Subsonic 是否与 Visual Studio 2010/.Net 4.0 兼容? 最佳答案 是的,Subsonic 3 在 .NET 4 中应该可以正常工作。我正在使用 Subso
我正在使用 SubSonic 2.2 和 sqlite,在处理具有非 AUTOINCREMENT 的 INTEGER PRIMARY KEY 列的表时遇到了问题。根据faq : If you decl
我已经使用 SS2.1 有一段时间了,并且非常喜欢它。然而,我注意到 2.2 已经发布了,所以我认为最好升级。将 2.2 放入我的 bin 文件夹后,它不再从 MySQL 构建与 v2.1 完美配合的
我们有某些表,其中有多个列共同构成主键。 当 SubSonic 为具有多列的表生成所有它的类时,仍有一些方法,如 FetchByID,只使用一个值作为主键。 因此,外键属性将返回错误的项目。例如,我们
我有一个名为“用户”的表,它有一个名为“已删除”的列,一个 bool 值表示用户已从系统中“删除”(当然,没有实际删除它)。 我也有很多表对 Users.user_id 列有 FK。 Subsonic
我对使用 SubSonic 真的很感兴趣,我已经下载了它,到目前为止我很享受,但是查看 github 和 googlegroups 上的事件,它似乎不是很活跃,看起来很像一个正在消亡的项目. tekp
我的网站正在使用 Subsonic 2.2。 我遇到了一种奇怪的情况,我需要运行一些临时 SQL 语句。 public IList GetDistincList(string TableName, s
我是一名优秀的程序员,十分优秀!