问题标签 [castle-activerecord]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 关于如何从域 (ORM) 对象映射到数据传输对象 (DTO) 的建议
我正在开发的当前系统利用 Castle Activerecord 在域对象和数据库之间提供 ORM(对象关系映射)。这一切都很好,而且大多数时候实际上效果很好!
问题来自于 Castle Activerecords 对异步执行的支持,更具体地说,是管理对象所属会话的 SessionScope。长话短说,坏事发生了!
因此,我们正在寻找一种方法来轻松地将域对象(他们知道数据库存在并关心)转换(自动思考)到 DTO 对象(他们对数据库一无所知,不关心会话、映射属性或所有事情)奥姆)。
有没有人有这样做的建议。首先,我正在寻找对象的基本一对一映射。域对象Person将被映射到说PersonDTO。我不想手动执行此操作,因为它是一种浪费。
很明显,我想到了反思,但我希望这个网站周围有一些更好的 IT 知识, 会建议“更酷” 。
哦,我在 C# 中工作,如前所述的 ORM 对象与 Castle ActiveRecord 映射。
示例代码:
根据@ajmastrean 的要求,我已经链接到一个我(严重)一起嘲笑的例子。该示例有一个捕获表单、捕获表单控制器、域对象、活动记录存储库和一个异步助手。它有点大(3MB),因为我包含了运行它所需的 ActiveRecored dll。您需要在本地计算机上创建一个名为ActiveRecordAsync的数据库,或者只需更改 .config 文件。
示例的基本细节:
捕获表格
捕获表单有对控制器的引用
在初始化表单时,它调用 MyController.Load() private void InitForm () { MyController = new CompanyCaptureController(this); MyController.Load(); 这将返回一个名为 LoadComplete() 的方法
这就是“坏事”发生的地方,因为我们正在使用设置为延迟加载的 Company 的子列表。
控制器
控制器有一个从表单调用的 Load 方法,然后它调用 Asyc 助手以异步调用 LoadCompany 方法,然后返回 Capture 表单的 LoadComplete 方法。
LoadCompany() 方法只是利用存储库来查找已知公司。
该示例的其余部分相当通用,它有两个继承自基类的域类、一个用于插入一些数据的设置文件和一个用于提供ActiveRecordMediator功能的存储库。
c# - C# + Castle ActiveRecord:HasAndBelongsToMany 和集合
假设我在帖子和标签之间有多对多关系(使用 ActiveRecord 属性 HasAndBelongsToMany)(更改域名对象名称以保护无辜者),我想要一个类似的方法
回参数中包含所有(不仅仅是部分)标签的所有帖子。我可以通过 NHibernate Expressions 或 HQL 来实现这一点吗?我搜索了 HQL 文档,但找不到任何适合我需要的东西。我希望我只是错过了一些明显的东西!orm - .NET 3.5 的 Castle-ActiveRecord 教程坏了?
有没有人尝试过使用 C# 3.5的 ActiveRecord介绍示例?我不知何故感觉样本完全错误或过时了。XML 配置完全错误:
应该 :
(如果我理解 nhibernate 配置语法正确..)
我想知道我做错了什么。在用户模型上调用 Count() 时出现“无法为用户执行 ExecuteQuery”异常。
不知道这可能是什么。教程源代码与页面上的源代码有很大不同(最明显的是 XML 配置),它是一个 VS2003 示例,在大多数情况下具有不同的语法(没有泛型等)。
有什么建议么?ActiveRecord 看起来很棒..
c# - 是否可以有一个列表作为活动记录类的属性
是否可以在 ActiveRecord 类上具有基本类型(例如 String)的 HasMany 关系,而无需创建另一个实体(例如(TodoListItem))来保存该值。
任何人都可以帮忙吗?
c# - 如何使用 Castle ActiveRecord 执行存储过程?
我相信网上某处有关于这个话题的讨论,但我丢失了网址,我无法通过谷歌搜索找到它。
我现在可能会尝试的是:
但是,我不太确定这是否是正确的方法,或者是否存在更好的方法。
.net - 使用 Castle ActiveRecord (.net) 时生成默认的 CRUD UI
是否有任何简单的方法可以使用 activerecord(城堡实现)或类似的 NET 生成默认 crud(给定实体)?
RoR 有类似的东西(它认为它称为 activescaffold)谢谢
c# - 我可以在 c# 中告诉 ActiveRecord 类的表名吗?
我正在尝试验证架构是否与我正在初始化的对象匹配。
除了简单地反映类名之外,还有其他方法可以获取类的 TableName 吗?
我正在使用一些具有显式 TableNames 的类
编辑:使用乔的解决方案,我添加了不指定表名的情况,它可能使用约束
nhibernate - NHibernate/ActiveRecord - 任何方式只映射到外键列?
我正在使用 Castle ActiveRecord,但这个问题也适用于 NHibernate,因为适用于 NHibernate 的解决方案应该适用于 ActiveRecord。无论如何,我拥有的是这样的底层表结构:
表A -hasMany-> 表B
我有相应的对象 EntityA 和 EntityB。EntityA 有一个 EntityB 对象的 IList。这部分工作正常。现在,我希望 EntityB 对 EntityA 有某种引用。我知道我可以使用 EntityB 上的 BelongsTo 属性为其提供对完整 EntityA 类型的实际引用,例如:
但我真正想做的是:
因此,EntityB 将仅存储父对象的 ID,而不是对实际对象的引用。这是一个微不足道的例子,但我有充分的理由想要采用这种方法。在我正在处理的应用程序中,我们有显示特定 EntityB 类对象的页面,我们希望这些页面包含指向相应父页面的链接(如超链接中的链接)。我们可以使用上面的第一种方法来做到这一点,但这需要在我真正需要的只是 ID 时加载整个 EntityA 对象。这不是什么大不了的事,但似乎很浪费。我知道我可以使用延迟加载,但同样,这对我来说更像是一种黑客行为......
我尝试使用 [Property] 属性标记外键,如下所示:
这种方法的问题在于,当您在新对象树上执行 EntityA.SaveAndFlush() 时,EntityB.ParentId 仍然为空。正确的值被写入数据库,我可以通过执行 EntityA.Refresh() 将值强制回 EntityB.ParentId,但同样,这似乎有点像 hack。
nhibernate - 我可以在不提交事务的情况下刷新我的 NHibernate 会话并获得一个新会话吗?
我正在使用 Castle ActiveRecord 进行持久性,并且我正在尝试为我的持久性测试编写一个基类,它将执行以下操作:
- 为每个测试用例打开一个事务并在测试用例结束时将其回滚,这样我就可以为每个测试用例获得一个干净的数据库,而无需为每个测试用例重建架构。
- 提供刷新我的 NHibernate 会话并在测试过程中获得一个新会话的能力,这样我就知道我的持久性操作确实影响了数据库,而不仅仅是 NHibernate 会话。
为了证明我的基类 ( ARTestBase
) 有效,我提出了以下示例测试。
这是我在基类上的最大努力。它正确实现Flush()
了,所以第三个测试用例通过了。但是它不会回滚事务,因此第二个测试失败。
请注意,我正在使用带有内存数据库的自定义 SQLite 提供程序。我的自定义提供程序取自这篇博文,它始终保持连接打开以维护架构。删除它并使用常规 SQL Server 数据库不会改变行为。
有没有办法实现所需的行为?
nhibernate - 如何使用 Castle ActiveRecord 预加载带有父子自引用的记录?
我的 SQL 表如下所示:
并映射到我的 ActiveRecord 模型中的以下类:
我正在使用 ActiveRecord 使用以下代码检索树根:
这为我提供了正确的对象图,但 SQL Profiler 跟踪显示,子页面正在由树中每个非叶节点的单独查询加载。
如何让 ActiveRecord 预先加载全部内容("SELECT * FROM Page")
,然后对内存中的对象进行排序以提供所需的父子关系?