为 .NET 项目选择数据库和 ORM

2023-12-01

我正在开发一个在客户端使用 Silverlight 的 .NET 应用程序。现在我已经到了我想扔掉服务器端的静态虚拟数据并添加数据库的地步。

对于数据库,我喜欢使用 ORM 之一,我可以在其中简单地标记我的模型类,并且数据库表是为我构建的。我之前用 Groovy 和 Grails 做了一些测试,认为 GORM 做得很顺利。在 .Net 中设置数据库的最佳方法是什么?

首先让我印象深刻的是使用 nHibernate。我对 nHibernate 一无所知,但我听到很多人热情地提到它。但后来我发现 ADO .Net 也是一个 ORM,它内置于框架中。nHibernate 胜过 ADO 吗?那么 LINQ 有什么关系呢?我看到它也被列为 ORM,但我认为 LINQ 更适合查询部分?我可以通过 LINQ“定义”数据库吗?

欢迎任何意见和建议。我也很想听听您是否对使用哪个数据库有意见。我认为 MS SQL Server 是最简单的选择?


NHibernate 和 Silverlight:

NHibernate 贡献者之一 Ayende Rahien 最近发布了一篇博文关于 NHibernate 和 Silverlight:

我有一些关于 NHibernate 和 Silverlight 的问题。这其实是一件很容易回答的事情。

甚至不要尝试。他们合不来。事实上,他们甚至无法相处。

Silverlight 没有 System.Data.IDbConnection,您可以放心地假设它对于 NHibernate 来说有些重要。

因此,在 Silverlight 应用程序中运行 NHibernate 可能是为了访问本地数据库。但我不认为这是大多数人在询问 NHibernate 和 Silverlight 时真正想到的。他们想了解服务器上的 NHibernate 和客户端上的 Silverlight。

这也很容易回答,它将像任何客户端/服务器系统一样工作。所有相同的规则均适用。

因此,只要您不打算直接从 Silverlight 客户端使用 NHibernate,它就应该可以工作。

休眠状态:

NHibernate 是一个很棒的 ORM,但它的学习曲线相当陡峭,因此如果您选择 NHibernate,您应该准备好投入一些时间来学习该框架。如果您进行了这项投资,您将获得 NHibernate 提供的灵活性和功能的回报。

城堡活动记录:

Castle ActiveRecord 是一个构建在 NHibernate 之上的框架,因此与 NHibernate 非常相似。它稍微减少了学习曲线,因为它添加了一些额外的抽象。顾名思义,它是为与 ActiveRecord 模式一起使用而构建的,并且包含一个基类,如果您不介意使用 ActiveRecord 基类,该基类将为您提供相当多的功能。

LINQ 到 SQL:

LINQ to SQL 和 ADO.NET Entity Framework 是 .NET Framework 中包含的两个 ORM。 LINQ to SQL 是一个比实体框架更小、更简单的框架,但它具有一些不错的功能,并且非常容易上手。

实体框架:

Entity Framework 也很容易上手,但由于它仍处于版本 1,因此在当前版本中存在一些相当大的问题。但是,Entity Framework 的下一个版本将改进并修复当前的许多缺点。

框架的 LINQ 和架构生成:

所有这些框架都支持使用 LINQ 作为查询语言。 LINQ to SQL 和 NHibernate 可以根据您的域类和映射为您生成架构。实体框架无法在 v1 中生成架构,但 v2 将添加该功能。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 .NET 项目选择数据库和 ORM 的相关文章

  • 下载 .NET 3.5 的实体框架

    哪个版本的实体框架 EF 我可以用在 NET 3 5我可以在哪里下载这个旧版本 对于 Net 3 5 您可以使用 EF v1 您是否尝试从以下位置下载 Microsoft NET Framework 3 5 Service Pack 1 h
  • Microsoft Teams 中私人消息的传入 Webhook

    我可以从 C 应用程序或 PS 脚本创建传入 Webhook 将 JSON 消息发送到 MSFT 文档所解释的通道 但是 我想使用传入的 webhook 将 JSON 消息从我的应用程序发送到用户 作为私人消息 就像 Slack 允许的那样
  • 无法在.net core中使用WCF WSHttpBinding

    我正在尝试将我的项目从 net 移动到 net core 我最初在 net 中使用 WCF WSHttpBinding 服务 但无法在 net core 中使用相同的服务 我尝试使用 BasicHttpBinding 在客户端与 WsHtt
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • 有没有办法设置 log4net 内存附加程序可以包含的最大错误消息数?

    我想向根记录器添加一个内存附加程序 以便我可以连接到应用程序并获取最后 10 个事件 我只想保留最后 10 个 我担心这个附加程序会消耗太多内存 该应用程序设计为 24 7 运行 或者还有别的办法吗 您需要创建一个自定义附加程序来存储有限数
  • 是什么原因导致 Linq 错误:此方法无法转换为存储表达式?

    我有一堆具有相同 select 语句的 Linq to Entity 方法 所以我想我会很聪明 并将其分离到它自己的方法中以减少冗余 但是当我尝试运行代码时 我得到了以下内容错误 该方法不能转化为 商店表达式 这是我创建的方法 public
  • 我应该如何在 VB.NET 中进行转换?

    所有这些都相等吗 在什么情况下我应该选择其中一个而不是其他 var ToString CStr 变量 CType 变量 字符串 DirectCast 变量 字符串 编辑 来自的建议不是我自己 https stackoverflow com
  • 在 .NET 中记录 StackOverflowException

    最近 我的 NET 应用程序 asp net 网站 中出现了堆栈溢出异常 我之所以知道该异常是因为它出现在我的 EventLog 中 我知道 StackOverflow 异常无法被捕获或处理 但是有没有办法在它杀死您的应用程序之前记录它 我
  • 设置 runat=server 时输入名称和 id 发生变化

    在我的表单中 我需要插入 文本 类型的不同输入 输入必须是带有名称和 ID 的 html 控件 因为我将此表单发送到外部网址 对于验证 我在所有输入中执行 runat server 然后我可以使用 requiredfieldvalidato
  • 在 System.Xml.XPath 中启用 XPath2 查询(XPathException:无效令牌)

    Microsoft 的 System Xml XPath nuget package 可用于 NET 4 6 声称支持 XPath 1 0 和 2 0 德文档 https msdn microsoft com en us library s
  • 到 ToList() 还是不到 ToList()?

    给定一个在记忆中 不是 LINQ to SQL 类列表 List
  • .NET 中严格浮点数学的库

    我有 Java 算法 计算及其单元测试 单元测试期望结果具有一定的精度 增量 现在我将算法移植到 NET 中 并希望使用相同的单元测试 我使用双数据类型 问题在于 Java 使用 strictfp 64 位 来执行 Math 类中的某些操作
  • 基于 JPA 注释生成 ERD(实体关系图)的工具

    我正在使用 ormlite 编写 java 代码 我想知道是否可以从代码中的 JPA 注释生成 ERD 基本上 我需要相反的情况 如何将基于实体的图转换为 JPA java 代码 https stackoverflow com questi
  • 什么是时序数据库?

    What is 时间序列数据库例如InfluxDB 我应该何时 何地使用它 请给我它的业务场景示例 检查wiki https en wikipedia org wiki Time series database 时间序列数据库 TSDB 是
  • 序列包含多个元素

    我在通过 Linq 获取 RhsTruck 类型的列表并显示它们时遇到一些问题 RhsTruck 只有属性 品牌 型号 序列号 等 RhsCustomer 具有 CustomerName CustomerAddress 等属性 我不断收到错
  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 如何在加载.NET WinForm应用程序user.config文件时捕获异常?

    有时 在使用默认配置系统的 NET 2 0 WinForm 桌面应用程序中 user config文件将被损坏并且无法再加载 当配置系统尝试加载它时 它会抛出一个System Xml XmlException 抛开 为什么文件首先被损坏 的
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 为什么有些人在循环宏的子句中使用关键字?

    它能解决任何问题吗 根据 PCL 的第一个脚注 如果不是关键字 它会将符号保留在当前包中 由于所有关键字都被保留在关键字包中 因此可以防止多个符号被保留在不同的包中 但还有其他优点吗 它会产生什么问题 我猜一定有问题 因为这不是普遍的惯例
  • 极坐标图中的箭头

    我试图绘制串联 R L C 电路中电阻器 电容器和电感器两端电压的相量 我已经完成了所有的计算 我可以用正常的方式得到一个像样的图ax plot theta r 我想让相量向量看起来像箭头 我一直在尝试使用ax arrow 0 0 thet
  • 为什么需要 Lambda 函数将值传递给 @onclick 调用的方法?

    我是 Blazor 以及一般的 Web 开发人员 的新手 我跟着Microsoft 的 Blazor Web 应用程序待办事项列表教程 在完成上述教程后 我想进一步在每个列表元素旁边添加按钮以将它们从列表中删除 这是我为实现这一目标而编写的
  • 使用Postman发送PATCH到Asp.net Core webapi时出错

    我有一个模型 public class Order public Guid Id get set public IEnumerable
  • matplotlib twinx 在循环内

    我有一个循环 在特定条件下 例如出现 3 次 我想用 twinx 绘制两个数据集 所以例如最后我在左 y 上有 3 个图 在右 y 上有 3 个图 当我使用通常的 twinx 时 循环的右 y 值不正确 我应该如何修改此示例代码才能使其正确
  • 何时要求子句表达式需要加括号? (偶然的双关语)

    这给出了一个错误 template
  • document.getElementById 替换 angular4 / typescript 中的?

    我在实践工作中使用 Angular4 这对我来说是新的 为了获取 HTML 元素及其值 我使用了
  • 如何在ListView列表项中添加节标题

    我想开发 国家历史 Android应用程序 但我有一个问题 我无法将国家 地区标题放入列表视图列表项中 我想放标题 例如 非洲 北非 撒哈拉以南非洲 亚洲 北亚 西亚和中亚 南亚和东南亚 欧洲 北美和中美洲 北美洲 大洋洲 南美洲 这是我的
  • 如何用多个分隔符分割字符串并保留分隔符?

    我有例如这个字符串 abc 现在 我想把它分成 分隔符 我知道我可以使用 String split 来实现这一点 但有没有办法可以通过这个符号来分割 if 但又不会丢失它 就像如果我使用 split 我会得到这个string abc 而且我
  • 用于维护计数器和聚合的 Firebase 控制服务器

    It s a 已知问题firebase 没有简单的方法来计算项目 我计划创建一个严重依赖计数和其他聚合的应用程序 我担心按照建议的规则创建此应用程序的计数器here将非常复杂且难以维护 所以我想到了这个模式 我将保留一个服务器来侦听数据库中
  • 强制 Sympy 在 MathJax Jupyter 中打印数学

    我正在使用 VSCode 和 Jupyter 来处理 Sympy 通常 它以 MathJax 格式打印数学方程 sympy 文档说 在IPython笔记本中 它将使用MathJax来渲染LATEX MathJax 输出 但是 当我安装 ma
  • 捕获 Mysqli 错误

    我定义了一个自定义错误处理程序 它捕获所有异常并将它们保存到日志中 现在 如果我在 mysqli 查询中出现语法错误 例如拼写错误 页面将在此时完全停止加载 不会引发异常 因此不会触发错误处理程序并且不会记录任何内容 这是正常的吗 我应该检
  • 如何渐变填充按钮的背景?

    我必须创建一个带有渐变填充的彩色按钮 从按钮的中间沿 Y 轴开始 如果我将按钮的背景属性设置为我想要的颜色 我会丢失rounded按钮的外观和感觉以及渐变填充 它看起来像TextView有背景 另外 我希望当用户按下按钮时改变这种颜色 我可
  • 在 jquery ajax 中使用动态数据实现自动完成

    我在 ASP Net MVC 应用程序中使用 Materialize ui 并且使用带有动态数据的自动完成控件 这是我的代码 div class row div class col s12 div class row div class i
  • 节点 module.exports 返回未定义

    我在使用 Node js 时遇到问题module exports 我明白那个module exports是返回一个对象的调用 该对象具有为其分配的任何属性 如果我有这样的文件结构 formatting js function Format
  • 锁助手的线程安全使用(关于内存屏障)

    我所说的锁定助手指的是一次性对象 可以通过它来实现锁定using声明 例如 考虑一个典型的用法SyncLock班级来自乔恩 斯基特的 MiscUtil public class Example private readonly SyncLo
  • 替换python中的特殊字符

    我有一些来自网络的文字 6 49 显然我希望它显示为 6 49 到目前为止我已经尝试过以下操作 s url title s s encode utf8 s s replace u 还有一些变体 在同一个论坛上找到它之后 但仍然没有运气 因为
  • 理解Python的枚举

    在转向 python 之前 我开始自学一些 c 并且习惯于编写循环 例如 for int i 0 i lt 20 i cout lt lt value of i lt lt i lt lt endl 转向 python 我经常发现自己使用类
  • Infinispan - 设置每个实体的expiration.lifespan

    我在 Jboss 6 1 0 上部署了一个 java Web 应用程序 它使用 infinispan 5 2 6 Final 我正在尝试设置每个实体特定的有效期遵循本指南 http infinispan org docs 5 2 x use
  • 为 .NET 项目选择数据库和 ORM

    我正在开发一个在客户端使用 Silverlight 的 NET 应用程序 现在我已经到了我想扔掉服务器端的静态虚拟数据并添加数据库的地步 对于数据库 我喜欢使用 ORM 之一 我可以在其中简单地标记我的模型类 并且数据库表是为我构建的 我之