c# – 我想要一个ORM吗?

我们在三个应用程序中使用了一个对象模型.两个程序收集数据,另一个程序读取数据并生成报告.系统非常断开连接,因此我们不能让所有程序都与单个数据库通信.

现在,程序只使用公共库来填充对象模型并序列化/反序列化到磁盘.具体来说,我们正在使用XML序列化.

这个模型有几个问题. 1)XML可能被认为是浪费.这些文件可能变得庞大而且难以处理.老实说,文件大小现在不是一个大问题. 2)我最关心的是记忆足印.将整个文件加载到对象模型中,对其进行操作,然后保存.

希望我已经表达了我的担忧,在某些时候我们将在运行时遇到此应用程序的内存问题.足够的数据将被收集到一个“数据库”(xml文件)中,无法一次性加载到内存中.

我想要的是访问由文件存储而不是内存支持的对象模型.我希望对象模型的更改最小化.访问对象时,它来自磁盘,当它被设置时,它会被保存(如果可能的话,自动保存).

我们已经使用SQLite,SQL Compact 4.0和EF 4以及LINQ to XML(简要地)研究了NHibernate.我过去也使用db4o将对象缓存到磁盘,但这是一个不相关的项目.

在我潜入并花时间学习其中之一之前,我想知道我的想法是否有意义.我是否可以拥有一个“神奇地”缓存到存储介质的对象模型,而不仅仅是无限地膨胀我的内存占用?什么是完成这项工作的最短途径,即使它不是最优雅的?

还有其他技术可以帮助我吗?内存映射文件,linq-to-sql,Lazy(T)(仅用于在需要时从文件中提取对象).

我意识到这是一个开放式的问题.我正在寻找一个大图片响应和详细信息,如果有人有真实的世界经验这样做.链接会有所帮助……

谢谢.

解决方法

我刚刚完成了将由XML文件支持的(主要是“继承的”)Web应用程序迁移到NHibernate完全出于同样的问题.我也处于以前从未使用过NHibernate并希望在此过程中学习的情况.
这个想法确实有意义.您确实可以在内存中加载您实际需要的部分(而不是整个数据库)以及比这更多的好处.

基于您要求的其他内容(对象模型的最小更改,易于从实际应用程序迁移到基于ORM的应用程序)我不确定您是否会如此轻松地获取它们.
对于像NHibernate和EF4这样的ORM,模型类非常轻量级:它们基本上只是属性容器.基于XML文件的应用程序倾向于在模型中直接拥有更多逻辑:您可能必须转移到数据访问层的逻辑.重新设计模型和数据访问层可能是您将面临的最耗时的任务.我知道这是给我的.

我从你的问题推断出的另一件事(你说你不能让所有三个程序与同一个DB交谈,你提到SQLite和SQL Compact)是你通过物理复制文件在三个应用程序之间复制数据.您如何检测更改以及您需要3个数据库的对齐方式?您目前如何合并更改(如果您拥有3个应用程序中的2个可以写入数据)?
根据您复制数据的方式,ORM可能会或可能不会帮助您.

根据您的评论编辑更多积分

>如果您希望在某个时刻将文件合并到一个数据库中并且您还不确定它将是Microsoft产品,那么NHibernate是最佳选择.但是,如果您现在广泛使用LINQ(根据您的另一条评论)并希望更加无缝的转换,我会选择EF4:Nhibernate.Linq并不是真正完整的,而且有些构造不起作用.> NHibernate和EF4都有很好的文档,并且提供了关于如何从头构建完整应用程序的非常好的教程,因此学习部分非常简单.>两者都有一个“模型优先”的方法,您可以根据模型类获得一个为您创建数据库的工具,因此如果您的模型类非常轻量级,您应该能够轻松地使用它们.>在NHibernate中花费我一些时间(有时候我仍然很难工作)的事情是配置级联以按照我预期的方式运行:例如删除对象时“相关”对象会发生什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


1:最直白的循环遍历方法,可以分为遍历key--value键值对以及所有的key两种表现形式2:用Linq的方式去查询(当然了这里要添加对应的命名空间 using System.Linq)如下为一个十分简单的代码示例:private void GetDicKeyByValue(){ Dicti...
private void ClearTextBox(){ foreach (var control in pnlDetail.Controls) { if (!(control is TextBox)) continue; var txtBox = (TextBox)control; txtBox.
原文叫看《墨攻》理解IOC概念 2006年多部贺岁大片以让人应接不暇的频率纷至沓来,其中张之亮的《墨攻》算是比较出彩的一部,讲述了战国时期墨家人革离帮助梁 国反抗赵国侵略的个人英雄主义故事,恢宏壮阔,浑雄凝重的历史场面相当震撼。其中有一个场景:当刘德华所饰的墨者革离到达梁国都城 下,城上梁国守军问:
System.Data.ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
Request.Form value was detected from the client在使用ASP.NET MVC3 开发系统的用了百度的UEditor编辑器提交表单时遇到检测到有潜在危险的 Request.Form,我百度一下,试了网上的方法,都没用。要在Web.config增加<h
右击文件夹->安全选项卡->添加->高级->立即查找Windows Server 2003:请您在目录添加IIS来宾帐号(IUSR_Hostname)的只读权限,以及Network Service组的读写修改权限。Windows Server 2000:请您在目录添加IIS来
<compilationdebug="true"><buildProviders><addextension=".html"type="System.Web.Compilation.PageBuildProvider&q
在ASP.NET MVC 中 Spring.NET 配置注入的时候,下面这方式是可行的。<spring> <context> <resource uri="config://spring/objects" /> </context>
Stopwatch stopwatch = new Stopwatch();stopwatch.Start();。。。。。中间代码。。。	stopwatch.Stop();	long result = stopwatch.ElapsedMilliseconds;sqlBulkCopy.Close()
问题描述 在asp.net mvc 下配置ueditor图片上传时总是提示:缺少十六进制字符错误(IE下提示),起初还以为是我上传的图片名称中有中文字符所致,后来我又上传了英文字符名字的图片发现还是一样的错误提示:◆无赖之下只好到火狐下看错误的详情:◆第二个错误我无法解决,先看第一个,输入地址显示错
已经安装net2.0 和3.5 ,但IIS里面却只有1.1开始→运行→CMDC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i按回车键后便会开始自动安装,安装完重启一下IIS在IIS中ASP.NET选项卡便可以看到。注
根据传进来不同的值,调用不同的方法View Code protected void btn_SwitchClick(object sender, EventArgs e){ string result = ""; switch (ddlMethod.SelectedValue)
整理两个 在C#中,用正则表达式 获取网页源代码标签的属性或值的方法 :1、获取标签中的值: CSDN 结果:CSDN/// /// 获取字符中指定标签的值 /// /// 字符串 /// 标签 /// 值 public static string GetTitleContent(string st
/// <summary>/// 集合装换DataTable/// </summary>/// <param name="list">集合</param>/// <returns></returns>publ
将目录下面所有的 .cs 文件合并到一个 code.cs 文件中,写著作权复制代码时的必备良药 @echo off echo 将该目录下所有.cs文件的内容合并到一个 code.cs 文件中! pause dir /ad/s/b > folderPath.txt md codeTemp for
做接口开发的时候,往往接受参数或返回值是一个XML的字符串。如下图,不方便辨识 两种方法, 1.将它保存为xxx.xml,然后用浏览器打开。这种方法稍微有些麻烦。 2.使用 UltraEdit 工具
一个字段控制多个状态选项private void GenerateAdvice_OnClick(object sender, RoutedEventArgs e){ TestStatus c1 = TestStatus.A | TestStatus.C | TestStatus.E; v...
效果如下: 代码如下:
StartUp.cs public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseEndpoints(endpoints => { endpoints.MapControllerRoute(