问题标签 [openaccess]
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# - Telerik OpenAccess 为每个函数调用生成相同的查询
我正在使用类似模式的通用存储库来获取数据。有 100 多个实体,因此为每个实体创建单独的存储库并不是一个真正的选择。以下是同一类的一些函数:
问题是不管调用哪个函数,Sql profiler显示都是一样的
从 [表格] 中选择 [列]
我想在使用 Take(1) 或 Count() 或 Where() 时,应使用Select的Count()、Top或Where子句相应地进行查询,但这些函数对查询生成绝对没有影响。显然,从服务器获取所有数据后,每个操作似乎都在内存中执行。
如果我访问它的方式有问题或者这是 Telerik 的正常行为,请指导我?
c# - Telerik OpenAccess:在文件“配置”中指定了类的映射,但找不到该类
我有一个使用 Telerik Open Access 的 C# Windows 服务。当我调用以下代码(查询)时,我收到以下错误。
代码
错误
在文件“config”中指定了类“Store.Data.User”的映射,但找不到该类。--> StoreModel/namespace[Store.Data]/class[User]
我怀疑该错误与查询本身无关,而是与存储库/OpenAccess 配置有关。
有没有人对此有见识?
谢谢!
c# - ASP.NET MVC 中的 Telerik OpenAccess NULL 参考
我在 ASP.NET MVC 5 中使用 Telerik 域模型。当我在单元测试项目中使用上下文时,一切正常。但是当我在 MVC 控制器上使用它时,我得到了这个异常:
谢谢
api - 如何通过 API/OAI/FTP 从开放存取期刊中获取出版物关键字?PubMed 或 DOAJ 或任何其他平台?
是否有已知的 API 或任何方法来获取DOAJ.org或PMC 开放访问子集中所有出版物的“作者列出的关键字” ?
我尝试了PMC 开放访问子集的 ftp,但 XML 文件只有 ID、摘要、标题、作者和附属机构作为任何文章的元数据。我希望大量获取每个出版物中列出的关键字。
此外,我看到几乎没有相同的线程,但仍然没有找到我正在寻找的答案。于是发了新帖。
非常感谢任何帮助。
谢谢,
阿斯米
sql - 替代 TOP 或 LIMIT 子句?
我正在以下查询中寻找替代 TOP 或 LIMIT 子句的方法。我希望输出是引擎状态从之前的值发生变化时。我将在开始和结束时合并另一个表,这样我就可以拥有该月的第一个值和该月的最后一个值,但为简单起见,这未在下面显示。基本上,我想要列输出当状态从一行更改为下一行时,在报告中。
小数据集如下。数据集中涉及 20 个引擎,下面仅显示一个。每月大约 180K 行。
该数据库使用下面链接的 OpenAccess SQL 运行。TOP 可以在子查询、派生表或联合联合中使用,但不能使用。据我所知,不支持 LIMIT 。
http://media.datadirect.com/download/docs/openaccess/sdk/openaccess_sql.pdf
c# - 优化 .NET POCO 的 JSON 序列化性能
我一直在尝试优化要导入 MongoDB 的超过 500K POCO 的 JSON 序列化,但遇到的只是头痛。我最初尝试了 Newtonsoft Json.Convert() 函数,但这花费了太长时间。然后,根据 SO、Newtonsoft 自己的网站和其他位置上的几篇帖子的建议,我尝试手动序列化对象。但是没有注意到太多,如果有任何性能提升的话。
这是我用来启动序列化过程的代码......在每行上方的注释中,是给定一个包含 1000 个对象的数据集,完成每个单独操作所花费的时间。
目前,将每个单独的对象序列化为 JSON 文档大约需要 0.5 - 0.75 秒……对于 1000 个文档,大约需要 10 分钟……对于 10,000 个文档,大约需要 100 分钟,等等。我发现持续时间相当一致,但最终这意味着为了加载 600K 记录,执行数据加载将需要大约 125 个连续小时的处理时间。这是针对最终可能每天添加 20K - 100K 新文档的消息传递系统,因此性能对我们来说是一个真正的问题。
我正在序列化的对象包含几层“导航”属性或“嵌套文档”(取决于您是通过 ORM 还是 MongoDB 镜头查看它们),但在其他方面并不是特别复杂或值得注意。
我构建的序列化代码将前面代码示例中创建的 JsonTextWriter 实例传递到 POCO 的 ToJSON 函数中,因此我们不会为每个模型创建新的编写器以在序列化自身时使用。
以下代码是一些对象的截断示例,旨在说明实现技术(如何传递编写器以及如何手动构造 JSON)。还有更多属性和更多相关/嵌套对象,但这是我必须进行的“最深”遍历的一个示例。
它从“Session”对象开始,递归地调用它的依赖属性来序列化自己。
我怀疑我忽略了某些东西,或者问题在于我实现序列化的方式。一位 SO 发帖人声称通过手动序列化数据将他的加载时间从 28 秒减少到 31毫秒,所以我期待更显着的结果。事实上,这与我使用 Newtonsoft Json.Convert() 方法观察到的性能几乎完全相同。
任何诊断序列化延迟源的帮助将不胜感激。谢谢!
更新
虽然我还没有从 ORM 中提取数据访问,但我已经能够确认延迟实际上来自 ORM(感谢评论者)。当我按照建议添加 FetchStrategy 时,延迟仍然存在,但时间从花在序列化上转移到花在查询上(即加载导航属性)。
所以问题不在于序列化,而在于优化数据检索。
c# - Telerik DataAccess (OpenAccess) 可为空的外键性能
我们正在向使用 Telerik DataAccess ORM 的人寻求帮助。最近,我们遇到了一个可空外键的大性能问题。
当我们为可为空的 int 外键属性(没有 SaveChanges)赋值时,Telerik 会多次调用数据库并做一些奇怪的工作。我们使用dotTrace,发现有很多SQL DataReader调用和一些奇怪的string/DateTime/Enum/...转换器。仅当我们为属性设置值时才会出现此问题,get 工作正常。
一点关于我们的环境。我们试图创建一个空的控制台应用程序。调用了相同的奇怪代码,但在本地环境中要快得多 - 小型实体和本地数据库约为 60 毫秒。对于大型实体,它大约是 1.5 秒,但在我们使用 Azure Sql DB 的生产服务器中 - 它是从 10 到 50 秒。
备注:我们尝试直接加载和设置对象,不使用外键,它没有帮助。
在这里您可以找到 dotTrace 调用堆栈。
asp.net-mvc - 使用 Telerik Open Access 时如何修复“多线程”和“不允许新事务”错误?
我们有一个使用 Telerik Open Access 的 asp.net MVC 应用程序。一旦我们将数据投入生产,我们就会遇到各种各样的问题。Telerik 不再支持 Open Access,因此我们无法从他们那里获得任何帮助,但我们应该立即上线,并且现在没有预算的时间来更改。有人可以就如何解决这些问题给我一些建议吗?
我们在更新和插入记录时遇到了同样的错误,但这些问题并不总是发生。在我的计算机上从 Visual Studio 运行解决方案或将项目部署到我们的测试服务器后,我从来没有遇到这些错误。在生产服务器上,当多个用户使用该应用程序时,我们开始看到错误。
示例代码将是这个插入函数:
和这个更新功能:
在这两种情况下,这些方法都在一个名为 Repository 的类中。为这个类定义了一个私有变量(KOpenAccessContext 是项目中定义的类,实现了一个 OpenAccessContext 类):
然后在 Repository 构造函数中,将该私有变量分配给新的 KOpenAccessContext:
我们收到的错误消息是
Telerik.OpenAccess.Exceptions.DataStoreException:Telerik.OpenAccess.RT.sql.SQLException:不允许新事务,因为会话中正在运行其他线程。
和
[InvalidOperationException:无法启动第二个事务]
第一个是最常见的。
这篇文章:来自实体框架的 SqlException - 不允许新事务,因为会话中还有其他线程正在运行。表明问题出在 for 循环中的保存,但事实并非如此。
第三个答案建议将代码放在使用事务和使用上下文块中;我收到此错误:
Telerik.OpenAccess.OpenAccessException:System.InvalidOperationException:此 SqlTransaction 已完成;它不再可用。
我发现这篇文章:http ://www.telerik.com/forums/how-do-i-fix-a-new-transaction-is-not-allowed-error-is-telerik-open-access#swcnW_tPGEWglUih1TEAKg建议我创建“使用短暂的上下文实例”。对我来说,这意味着创建一个新的开放获取。我试过了,但仍然出现“不允许新交易”错误:
我真的很茫然,我有一个客户和老板向我寻求解决方案。我很想知道造成这种情况的原因(认为可能是因为有多个用户),但我真正需要的是一个解决方案。我怎样才能解决这个问题?
telerik - 在出现异常时在 OpenAccessContext 中获取修改后的实体
我知道我们可以通过以下命令访问 OpenAccessContext 中的新/修改/删除实体。
dbContext.GetChanges().GetInserts<object>()
dbContext.GetChanges().GetUpdates<object>()
dbContext.GetChanges().GetDeletes<object>()
如果在执行 SaveChanges() 时由于任何原因发生异常,我需要记录这些实体,但在出现异常时它们会被清除。
无论如何,如果出现异常,是否可以将实体从 OpenAccessContext 中取出?