天道酬勤,学无止境

Any thoughts on DevExpress XPO ORM Package? [closed]

问题

XPO 是我公司首选的对象关系映射器。 关于利弊的任何想法?


我只是在寻找有关该产品的一般感觉和轶事。 我们不会切换到 XPO。 我们只是摆脱了应用程序中的硬编码 sql 字符串,并完全转移到 ORM 以进行所有数据访问。

回答1

我已经使用它 6 到 7 个月了,对我来说,卖家的事实是,他们所有的 UI 组件都可以与 XPO 相对无缝地工作——而且他们的 UI 组件是一流的。

有些人可能会注意到他们的论坛受到的监控很差,而且几乎没有有用的流量——这是真的。 秘诀就是填票。 他们对所有支持请求做出快速、准确的响应。

回答2

总体而言,XPO 易于使用。 但是,当您计划使用遗留数据库或尝试将其引入棕地应用程序时,可能会有些痛苦。 我遇到的最痛苦的障碍是:

  • 所有对象都需要从 XPO 相关类继承和/或使用 XPO 相关属性。 所以,没有 POCO 对象
  • 不支持只读持久字段 OOTB。 这是可能的,但您需要做一些小技巧来阻止 XPO 更新数据库中的字段
  • 不支持预过滤关联,这会导致网络负载过大
  • 对外部复合键的支持很差。 公平地说,没有 ORM 可以很好地处理复合键。 它们被认为是“反 ORM”模式。
  • 一些小烦恼

正如丹尼斯在评论中指出的那样,自从我最初写了这个答案以来,XPO 有了很大的改进。 特别是,以下事情不再是问题:

  • 没有序列化,因此 XPO 对象很难在断开连接的 win 表单场景中使用,数据来自 Web 服务。 - XPO 现在支持各种序列化场景,可以很容易地与 WCF 一起使用。
  • 您不能使用自己的临时表进行多对多关系映射。 Xpo 需要此类临时表的特定名称。 - 这不再是一个案例
  • postgreSql 提供程序中不支持枚举 - 您只需要编写非常简单的值转换器就可以了。

此外,在今年晚些时候发布的下一个 XPO 版本中,以下问题将不再是问题:

  • 不支持 long 类型的键
  • postrgeSql 提供程序中不支持 db 模式

总而言之,XPO 得到了很大的改进。 大多数痛苦的障碍都被移除了。 在使用遗留数据库时,您仍然会遇到问题。 但总的来说,XPO 使用起来相当方便。

回答3

我发现 XPO 非常令人沮丧。 ORM 的主要思想是抽象出底层数据结构。 但是很快你就会注意到它们的默认字符串长度硬编码为 60 个字符,所以你最终会在每个字符串周围添加这些丑陋的 string.unlimited 东西。 这么多的抽象...

在对更复杂的对象建模时,您必须使用许多在对象模型中确实没有位置的语法,例如 XPCollection。 我想存储一个在类上有一个字符串字典的类,但遗憾的是 XPO 无法自动将它存储到数据库中。

因此,虽然它适用于简单类型,但当您想要存储更复杂的东西时,它很快就会崩溃。 再加上他们平庸的支持,确实有很多不足之处。

回答4

其他人可能会提供技术答案(例如查询语法、缓存的使用、映射到现有数据库结构的简便性或其他方式)——但如果你有一个已建立的 ORM 层,答案可能是

“为什么要改变”?

多年来,我在一个拥有数百名用户的成熟商业产品中成功使用了 XPO。 我发现它快速、灵活并且可以胜任。 目前我认为没有任何改变的必要,因为我们的数据量不是特别大,而且我们可以解决的问题(主要是缓存)。

如果我重新开始,我肯定会同时查看 NHibernate 和 ADO.NET Entity Framework。 但实际上,一切都很好。 我很可能会在技术问题之前查看该项目的商业情况。

例如,NHibernate 是开源的——那里是否有一个可行的社区来支持该工具并提供(如有必要)商业支持?

XPO 来自工具供应商,他们是否可能在产品的整个生命周期内继续经营?

ADO.NET Entity Framework 来自微软,它以更改数据库技术而臭名昭著,然后拉里给他的战斗机加注喷气燃料——这也会消失吗?

回答5
回答6

相比的优缺点是什么? 那里有很多替代品,最流行的是 nHibernate,新的孩子“ADO.NET Entity Framework”就在其中。

无论如何,根据您的情况和要求,有数百个答案。

回答7

我喜欢这样一个事实,即您可以只创建类,而 xpo 会为您创建表和关系——因此您可以从一个空白数据库开始。

我不喜欢的一个问题是,当我想删除一大堆东西时,它会通过我的收藏并删除每一个。 这需要很长时间,所以对于这种情况,我不得不编写一些自定义 sql(从表中删除等等)。 我不是 XPO 方面的专家,但这就是我发现的。

回答8

我第二个事实是删除带有一些集合的复杂对象需要非常非常长的时间。 到目前为止,文档或论坛无法帮助我解决这个问题。

除此之外,它使用起来非常简单,让您快速上手。

也很难弄清楚你的内存使用情况,我的设计中有复杂的大对象,使用它们比我想象的要大得多。

回答9
using System;
using DevExpress.Xpo;
using DevExpress.Data.Filtering;
using NUnit.Framework;

namespace XpoTdd {
    public class Person:XPObject {
        public Person(Session session) : base(session) { }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        [Persistent]
        public string FullName { get { return FirstName + " " + LastName; } }
    }
    [TestFixture]
    public class PersonTests {
        [Test]
        public void TestPersistence() {
            const string connStr = "Integrated Security=SSPI;Pooling=false;Data Source=(local);Initial Catalog=XpoTddTest";
            UnitOfWork session1 = new UnitOfWork();
            session1.ConnectionString = connStr;
            Person me = new Person(session1);
            me.FirstName = "Roman";
            me.LastName = "Eremin";
            session1.CommitChanges();
            UnitOfWork session2 = new UnitOfWork();
            session2.ConnectionString = connStr;
            me = session2.FindObject<Person>(CriteriaOperator.Parse("FullName = 'Roman Eremin'"));
            Assert.AreEqual("Roman Eremin", me.FullName);
        }
    }
}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Any thoughts on DevExpress XPO ORM Package? [closed]
    As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. Closed 10 years ago. XPO is the object relational mapper of choice at my company. Any thoughts on the pros and cons? I was just looking for general feeling and anecdotes about the product. We are not switching to XPO. We are just getting rid of hard coded
  • Manual DAL & BLL vs. ORM
    Which approach is better: 1) to use a third-party ORM system or 2) manually write DAL and BLL code to work with the database? 1) In one of our projects, we decided using the DevExpress XPO ORM system, and we ran across lots of slight problems that wasted a lot of our time. Amd still from time to time we encounter problems and exceptions that come from this ORM, and we do not have full understanding and control of this "black box". 2) In another project, we decided to write the DAL and BLL from scratch. Although this implied writing boring code many, many times, but this approach proved to be
  • 加入在 Devexpress XPO 中的 LINQ 中不起作用(Join doesn't working in LINQ in Devexpress XPO)
    问题 我使用了持久性类并使用了以下 LINQ 查询: XPQuery<Students> objStudentQuery = new XPQuery<Students>(XpoDefault.Session); XPQuery<ExamDetails> objExamDetailsQuery = new XPQuery<ExamDetails>(XpoDefault.Session); var ExamDetails = from exm in objExamDetailsQuery join student in objStudentQuery on exm.StudentId equals student.StudentId select new { student.FirstName, student.LastName, exm.ExamName, exm.Marks, exm.Date }; 但它抛出一个错误说。 “不支持指定的方法” 如何使用 XPO 持久性类从两个表中获取数据? 谢谢 回答1 XPO 不提供使用标准 SQL 方法连接数据的功能。 相反,它提供了一个关联概念。 我建议您查看 XPO 知识库文章中描述连接数据的 XPO 方式的来自多个表的连接数据的细节。
  • How to create DevExpress XPO dynamically with multiple primary-keys table?
    I try example in this topic https://github.com/DevExpress-Examples/XPO_how-to-create-an-xpclassinfo-descendant-to-dynamically-build-a-persistent-class-structure-e1729 But It only works for single primary key tables. So i searched more Found this: https://github.com/DevExpress-Examples/XPO_how-to-create-persistent-classes-mapped-to-tables-with-a-composite-primary-key-at-runtime-e4606 Buts there's big different and I think its not satisfy because it speaking about composite key( one Key which have many columns) So all I need please an example of creating XPO dynamically from SQL -Server Table
  • Join doesn't working in LINQ in Devexpress XPO
    I have used persistance class and used following LINQ query : XPQuery<Students> objStudentQuery = new XPQuery<Students>(XpoDefault.Session); XPQuery<ExamDetails> objExamDetailsQuery = new XPQuery<ExamDetails>(XpoDefault.Session); var ExamDetails = from exm in objExamDetailsQuery join student in objStudentQuery on exm.StudentId equals student.StudentId select new { student.FirstName, student.LastName, exm.ExamName, exm.Marks, exm.Date }; but it throws an error saying. "Specified Method is not Supported" How can i get data from two table using XPO Persistance Class? Thanks
  • 我是否必须在每个页面中添加“<%@ Register assembly=”?(Do I have to add “<%@ Register assembly=” to every page?)
    问题 我升级了 DevExpress 组件,但在我的应用程序中,我必须更改每个页面中的每个<%@ Register assembly="Dev....... version=....行。 有没有办法做到这一点,而无需在每一页上放置相同的行? 我不能在 web.config 页面中执行此操作吗? <%@ Register Assembly="DevExpress.Web.ASPxGridView.v10.1, Version=10.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxGridView" TagPrefix="dx" %> 回答1 是的,请参阅 http://weblogs.asp.net/scottgu/archive/2006/11/26/tip-trick-how-to-register-user-controls-and-custom-controls-in-web-config.aspx 回答2 我想添加 web.config 的最后状态: <system.web> <pages controlRenderingCompatibilityVersion="3.5" theme="OrderDefault" clientIDMode=
  • ORM 有什么了不起?(What is so great about ORM?)
    问题 所以我有一个头靠在墙上的时刻,希望有人能来帮忙拆除墙壁或阻止我的头移动!! 在过去的 3/4 周里,我一直在研究 ORM,以便为新项目做好准备。 ORM 必须映射到现有的、大型且老化的 SQL 数据库。 所以我尝试了亚音速。 修改后我真的很喜欢 v2 和 v3,可以很好地与 VB 一起工作,并且 SQL 中的命名模式运行正常。 然而,它缺乏单独的实体属性名称与列名称的灵活性,这让我感到很困惑(抱歉,Rob)。 我尝试过 Entity Framework,但我发现它在某些方面与其他人一样缺乏。 所以我咬紧牙关尝试了 nHibernate 但大约一周后让它按照我喜欢的方式工作(在 Codesmith 的帮助下为我生成类/hbms)我对启动所需的时间感到沮丧(构建一个配置对象) ,尽管尝试了许多技巧来减少这个时间。 我基本上是在构建一个可以在应用程序和网站之间共享的 DAL 类之后。 我是不是叫错了树? 对于具有 100 个表的遗留项目,我应该返回 ado.net 并使用 DTO 吗? 啊! 对不起,问题的风格。 我的头发不多了,我想保留我所拥有的!! 提前致谢,埃德 附注。 我应该补充一点,我非常了解 SQL,并且不怕弄脏我的手来编写快速查询。 如果有什么我不需要对 SQL 隐藏 回答1 ORM 让你: 将表行映射到对象,这是面向对象编程的可行部分。 自动浏览对象关系轻松添加
  • Bind Image in DataTemplate to System.Drawing.Image
    I am attempting to bind Image.Source in a DataTemplate to a System.Drawing.Image as discussed here: using XAML to bind to a System.Drawing.Image into a System.Windows.Image control <UserControl.Resources> <media:ImageConverter x:Key="imageConverter" /> <DataTemplate DataType="{x:Type data:GameTile}" > <StackPanel Orientation="Vertical" Margin="5" Background="Transparent"> <Viewbox> <TextBlock FontWeight="Bold" Text="{Binding PointValue}" TextAlignment="Center" FontSize="14" /> </Viewbox> <Image Margin="0,5,0,0" Source="{Binding Path=Image.Image, Converter={StaticResource imageConverter}}" /> <
  • DexExpress eXpressApp 框架的设计和建模(Design and Modelling for DexExpress eXpressApp Framework)
    问题
  • 将 DataTemplate 中的 Image 绑定到 System.Drawing.Image(Bind Image in DataTemplate to System.Drawing.Image)
    问题 我正在尝试将 DataTemplate 中的 Image.Source 绑定到 System.Drawing.Image,如下所述: using XAML to bind to a System.Drawing.Image into a System.Windows.Image control <UserControl.Resources> <media:ImageConverter x:Key="imageConverter" /> <DataTemplate DataType="{x:Type data:GameTile}" > <StackPanel Orientation="Vertical" Margin="5" Background="Transparent"> <Viewbox> <TextBlock FontWeight="Bold" Text="{Binding PointValue}" TextAlignment="Center" FontSize="14" /> </Viewbox> <Image Margin="0,5,0,0" Source="{Binding Path=Image.Image, Converter={StaticResource imageConverter}}" /> </StackPanel> </DataTemplate> <
  • How to exclude private members from StyleCop rule SA1600
    Does anyone know how to change the StyleCop rule SA1600 that says elements must be documented so that it only applies to properties and not to private members? Our ORM (DevExpress XPO) requires that you have private members for all public properties (because you have to call a function in the setter to persist it as well as storing it in the private member), and commenting both the public property and the private member with the same thing is killing me considering that some of the tables have upwards of 50 fields.
  • 为具有不同地理区域用户的应用程序设置后端数据库(backend db setup for an app with geographically diverse users)
    问题 我工作的内部开发软件通过我们的 devexpress orm (XPO) 直接连接到我们办公室的 mysql 服务器。 性能很棒。 我们正在开设另一个办事处……越野。 性能:不是很好。 要求是该软件在两个办公室中的响应能力与在本办公室中一样,并且来自一个办公室的数据“实时”提供给另一个办公室。 这种规模的东西对我来说是全新的。 我不反对引入一位以前做过类似事情的顾问,但我想先对选项有一个很好的了解。 我确信这是一种常见的情况。 复制是个好主意吗? 速度够快吗? 够稳定吗? 如果复制不起作用,是否有解决这种情况的开发模式? 哎呀,我什至不知道如何标记这个,所以如果有人知道得更好...请随时重新标记 编辑 > 有关数据的详细信息 我想,与某些企业软件相比,我们不会移动大量数据。 该软件管理客户账户、约会等,每个用户每分钟处理大约 2-5 个单独的账户(目前 50 个用户,计划扩展后 200-400 个),每次更新数据。 当办公室 A 中的某人为办公室 B 中的某人创建约会时,实时方面就会发挥作用,理想情况下,他需要能够立即(<2 分钟)查看其详细信息。 也就是说,每条记录通常每天最多只能变异 5 次。 但这只是我怀疑的; 我实际上没有任何关于我的使用统计数据。 回答1 你最后的手段之一当然是确保所有繁重的工作都在后台线程中完成,这样 GUI 线程永远不会被阻塞。
  • .NET Compact Framework (Windows Mobile 6.1, SQLServerCE) 有没有免费的 ORM?(Is there any FREE ORM for .NET Compact Framework (Windows Mobile 6.1, SQLServerCE)?)
    问题 看起来我找到了一个很好的商业变体,但我正在寻找免费的。 有人知道吗? 回答1 我目前正在寻找在 Windows CE 上使用的免费 .net ORM。 到目前为止,我已经找到了这些商业选择: DevXpress XPO LLBLGenPro 实体空间 遗憾的是,NHibernate 不是一个选项,因为它使用了 Compact Framework 中不可用的功能(例如反射相关功能)。 如果使用 SQL 数据库作为底层数据存储不是绝对必要的,那么 Karvonite 值得考虑。 它是一个与 .net Compact Framework 兼容的免费 (Ms-PL) 对象持久性框架。 您是否需要使用 SQL Server Compact 或者您真的只是想要一种简单的方法来持久化您的域? 如果我找到更多选项,我会更新您。 回答2 OpenNETCF ORM 怎么样? 它是免费的、轻量级的,专为 Compact Framework 构建,然后移植到其他平台(而不是有人将桌面 ORM 硬塞到 CF 中)。 回答3 我构建了 DapperLite 以在 .NET Compact Framework 和完整的 .NET 上工作。 它基本上是一个 Dapper 克隆,因此它是一个不到 200 行的单个文件,您可以放入您的项目中。 我曾尝试过 OpenNETCF.ORM,但发现它太固执了。
  • ASP.NET MVC + ORM(ASP.NET MVC + ORM)
    问题 我正在启动一个使用 ASP.NET MVC 的项目并开始创建我的模型。 因为我知道一些Ruby On Rails 并希望使用尽可能类似于 Rails Active Record的系统。 有没有人在 ASP.NET MVC 应用程序(或任何相关的应用程序)中使用过Castle Projects Active Record并且有一些经验可以分享? MVC 和 Castle Active Record 是正确的方法还是建议我改用 LinqToSql。 请分享您可能获得的任何想法和经验。 编辑:澄清; 我有很长的 ASP.NET 和 C# 背景,但看过一些 Rails 并且喜欢创建 ORM 是多么容易 回答1 我在 ASP.NET MVC 中使用了 Castle Active Record。 我强烈推荐这种模型,因为 ActiveRecord/NHibernate 比 LINQ to SQL 或实体框架成熟得多。 我认为 ASP.NET MVC 有一个光明的未来,并且会在新项目中推荐它而不是 Monorail。 但是,正如我所说,ActiveRecord(在我看来)是优于 LinqToSQL 的 ORM。 回答2 来自 Rails 背景,Castle Project AR 会感觉更接近您所习惯的,但 Linq to SQL 更好地与整个 Microsoft 生态系统集成
  • 什么是最好的 winform UI 组件集? [关闭](What is the best winform UI component set? [closed])
    问题 关闭。 此问题不符合 Stack Overflow 准则。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其成为 Stack Overflow 的主题。 3年前关闭。 改进这个问题 我一直在寻找商业 winform UI 组件集有一段时间了。 我已经看过了大多数大玩家,我想我要把我的钱花在 Developer Express DXperience 包上。 它并不便宜,但做了很多很棒的事情,比如集成打印和报告、良好的拼写检查器实现等。它的学习曲线非常丰富,因为它功能丰富,但他们有一个很好的支持站点并提供很好的支持。 我想知道其他人使用什么,以及 Dev Express 组件是否有任何“问题”。 回答1 我们最初只从 DevExpress 购买了 XtraTreelist 组件,但印象深刻以至于我们继续购买 Professional Winforms Suite,今年我们升级到 Enterprise Suite(同时支持 Winforms 和 Web)。 作为奖励,它带有代码匆忙和重构,一旦你掌握了它们,它们有助于节省时间(另外,它使你的代码看起来很漂亮......)。 我想说他们的支持非常好 - 我过去发现了几个错误,我在 24 小时内回复了这些错误,并指出他们将在下一个版本中修复该问题。 一个问题(如果你可以这么称呼的话)是他们的大多数组件都有一个“属性”属性
  • Unable to load type 'NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu'
    问题 我正在尝试通过“您的第一个基于 NHibernate 的应用程序”来了解其他类型的 ORM(我习惯于 DevExpress 的 XPO),并且我知道 tut 使用的版本和最新的可用版本。 当我尝试运行 can_add_new_product 测试时,我收到标题为这个问题的错误。 我添加了对 NHibernate.ByteCode.LinFu (CopyLocal=true) 的引用我像这样将属性添加到我的 hibernate.cfg.xml 中(为了便于阅读,隔开多行): NHibernate.ByteCode.LinFu.ProxyFactoryFactory,NHibernate.ByteCode.LinFu 我确保我在 x86 中运行构建。 我还能做些什么来解决这个问题? 回答1 节点中的完整语法应该是这样的: <property name="proxyfactory.factory_class"> NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu </property> 你能确认这是你的全文吗? 还要确保您的 DLL 具有以下内容: LinFu.DynamicProxy.dll NHibernate.ByteCode.LinFu.dll 希望这可以帮助。 我将它用于延迟加载
  • 持久化框架?(Persistence framework?)
    问题 我正在尝试确定访问数据库的最佳策略。 我知道这是一个通用问题,没有一个好的答案,但我会提供一些关于我正在寻找的内容的指导方针。 过去几年,我们一直在使用我们自己的持久性框架,尽管它也很有限。 但是,它需要一些重大改进,我想知道我是否应该这样做或使用现有框架之一。 我正在寻找的标准,按重要性排序是: 客户端代码应该使用干净的对象,宽度没有数据库知识。 使用我们的自定义框架时,客户端代码如下所示: SessionManager session = new SessionManager(); 订单 order = session.CreateEntity(); order.Date = DateTime.Now; // 设置其他属性 OrderDetail detail = order.AddOrderDetail(); detail.Product = 产品; // 其他属性 // 现在提交所有更改 session.Commit(); 应该尽可能简单而不是“太灵活”。 我们需要一种方法来做大多数事情。 应该对面向对象编程有很好的支持。 应该处理一对多和多对多的关系,应该处理继承,支持延迟加载。 配置最好是基于 XML 的。 以我目前的知识,我看到了这些选项: 改进我们当前的框架 - 问题是它需要大量的努力。 ADO.NET Entity Framework - 没有很好的理解
  • 哪个 O/RM 工具支持 Microsoft 的 Access?(Which O/RM tool supports Microsofts Access?)
    问题 对于我的一个客户,我目前正在构建一个与旧版 Microsoft Access 数据库通信的应用程序。 不幸的是,迁移到 SQL Server 还不是一个选择。 我目前使用OleDbConnection 、 OleDbCommand和 -good old- 基于文本的查询来编写查询。 正如你可以想象的那样,我对使用现代 O/RM 工具有点被宠坏了,我觉得我回到了过去。 哪个 O/RM 工具支持 Microsoft Access,这样我就可以摆脱这种丑陋了? 回答1 休眠和 MS 访问 LLBLGEN 如何使用 MS Access 作为 ADO.NET 实体框架的提供者? 回答2 ALinq,http://www.alinq.org 回答3 我还在我的项目中使用了 EntitySpaces 与 Legacy MSAccess -> SQLServer 转换项目。 因此,如果您沿着这条路走下去,那将是非常直截了当的。 回答4 签出 XmlDataMapper 一个简单的免费 ORM(LGPL 许可证),它支持几乎所有数据库,包括 Access 提供的示例项目应该足以开始使用。 要集成 XmlDataMapper,您只需 4 个小步骤 为数据库中的表创建业务实体/DTO 使用表和 DTO 之间的映射信息创建一个 XML 文件。 在配置中指定 DTO 和 xml 文件。 只需调用
  • 项目无法打开,visual studio 崩溃(project can't be opened, visual studio crashing)
    问题 我做的最后一件事是在更新表单颜色的用户控件中添加一个计时器。 现在每次我打开项目时,它都会加载它,然后说“Visual Studio 停止工作”。 我注意到 Visual Studio 在设计器模式下也“运行”了计时器,所以我认为这可能是导致问题的原因,所以我从 Designer.cs 中删除了计时器,然后重命名了 Visual Studio 正在打开的所有文件,但它仍然崩溃。 所有其他项目工作正常。 这是我第 4 次发生这种情况。 我正在使用 Visual Studio 2012 Ultimate。 请问有什么建议吗? 回答1 听起来您的解决方案设置在 Studio 崩溃时已损坏。 您可以通过删除解决方案的*.suo文件来重置它们: 确保您可以查看隐藏文件在 Windows 资源管理器中查找您的解决方案。 它应该是一个*.sln文件同一个文件夹中应该有一个隐藏的*.suo文件。 删除它。 这将重置所有特定于解决方案的设置,包括您打开的窗口。 将来,您可以通过使用 Form.DesignMode 属性(继承自System.ComponentModel.Component )将代码包装在if来防止代码在设计器中执行: if(!this.DesignMode) { /* put code to be excluded from the designer here */ } VS
  • 实体框架如何处理大量记录? [关闭](How entity framework works for large number of records? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可解决一个问题。 3年前关闭。 改善这个问题 在这里,我已经看到一个尚未回答的问题。 我的问题是- EF真的为大规模应用做好了生产准备吗? 这个问题源于这些潜在的问题- EF将所有记录拉入内存,然后执行查询操作。 当表大约有1000条记录时,EF的行为如何? 对于简单的编辑,我必须拉动记录进行编辑,然后使用SaveChanges()推送到db。 回答1 我遇到过类似的情况,我们有一个大型数据库,每个数据库有7至1千万条记录。 我们使用实体框架来显示数据。 为了获得出色的性能,这就是我学到的东西; 我对实体框架的10条黄金法则: 了解仅在需要实际记录时才进行的对数据库的调用。 所有操作仅用于进行查询(SQL),因此请尝试仅获取一条数据,而不是请求大量记录。 尽可能修剪取回大小是的,(在某些情况下,存储过程是一个更好的选择,它们并不像某些人所认为的那样邪恶),您应该在必要时使用存储过程。 将它们导入模型并为其导入函数。 您也可以直接调用它们ExecuteStoreCommand(),ExecuteStoreQuery <>()。 函数和视图也是如此,但是EF具有一种奇怪的方式来调用函数“ SELECT dbo.blah(@id)”。 EF必须填充具有深层次结构的实体时