我遵循了"不要过早优化"的口头禅并使用Entity Framework编写了我的WCF服务.
但是,我描述了性能和实体框架太慢了.(我的应用程序在大约1.2秒内处理2条消息,其中我正在重写的(传统)应用程序同时执行5-6条消息.(旧应用程序调用sprocs进行数据库访问.)
我的分析指向实体框架占用每条消息的大部分时间.
那么,我的选择是什么?
那里有更好的ORM吗?
(只支持正常读取和写入对象的东西,并且它很快...)
有没有办法让实体框架更快?
(注意:当我说速度更快时,我的意思是从长远来看,而不是第一次调用.(第一次调用很慢(消息为15秒),但这不是问题.我只需要它快速休息的消息.)
一些神秘的第三选项,将帮助我提高我的服务速度.
注意:我的大多数数据库交互都是创建和更新.我做的很少选择和删除.
我有一个Item.Item有一个Category.
Category有ID,Name,Parent和Children.Parent和Children是Category太.
当我为特定的LINQ to Entities查询时Item,它不返回相关的Category,除非我使用该Include("Category")方法.但它并没有带来父母和孩子的完整范畴.我能做到Include("Category.Parent"),但这个对象就像一棵树,我有一个递归的层次结构,我不知道它的结束.
如何让EF完全加载Category父项和子项,父项与父项和子项一起加载,依此类推?
这不适用于整个应用程序,出于性能考虑,仅需要此特定实体(类别).
假设我有一个表单查询
SELECT * FROM MYTABLE WHERE MYCOL in (?)
Run Code Online (Sandbox Code Playgroud)
我想参数化参数.
有没有一种直接的方法在Java中使用JDBC,以一种可以在不修改SQL本身的情况下在多个数据库上工作的方式?
我知道N + 1问题是执行一个查询以获取N个记录和N个查询以获取某些关系记录.
但是如何在Hibernate中避免它呢?
我是laravel和eloquent的新手,我不确定这是否可能.但是我有2张桌子,有一对多的关系.一个是"位置",一个是"用户".一个位置可以有很多用户.
因此,如果我希望获得所有用户的所有位置,我会这样做:
Location::with("users")->get();
Run Code Online (Sandbox Code Playgroud)
但我也想知道每个位置有多少用户,我试过这样做
Location::with("users")->count("users")->get();
Run Code Online (Sandbox Code Playgroud)
但那没用.
我已经阅读了本教程和本文,但我并不完全理解每种加载类型的用法.
我解释
我有这个POCO:
public partial class dpc_gestion
{
public dpc_gestion()
{
this.ass_reunion_participant = new HashSet<ass_reunion_participant>();
this.dpc_participant = new HashSet<dpc_participant>();
this.dpc_reunion = new HashSet<dpc_reunion>();
}
public int dpc_id_pk { get; set; }
public Nullable<int> dpc_id_gdp_fk { get; set; }
public Nullable<int> dpc_id_theme { get; set; }
public int dpc_id_animateur_fk { get; set; }
public Nullable<System.DateTime> dpc_date_creation { get; set; }
public Nullable<System.DateTime> dpc_date_fin { get; set; }
public Nullable<System.DateTime> dpc_date_engag_anim { get; set; }
public Nullable<bool> dpc_flg_let_engag_anim …Run Code Online (Sandbox Code Playgroud) 随着 .NET Core 3.0 的变化,我得到了
... NavigationExpandingExpressionVisitor' 失败。这可能表示 EF Core 中存在错误或限制。有关更多详细信息,请参阅 https://go.microsoft.com/fwlink/?linkid=2101433。)---> System.InvalidOperationException:处理 LINQ 表达式“GroupJoin,...
这是一个非常简单的查询,因此必须有一种方法可以在 .NET CORE 3.0 中执行它:
var queryResults1 = await patients
.GroupJoin(
_context.Studies,
p => p.Id,
s => s.Patient.Id,
(p, studies) => new
{
p.DateOfBirth,
p.Id,
p.Name,
p.Sex,
Studies =studies.Select(s1=>s1)
}
)
.AsNoTracking().ToListAsync();
Run Code Online (Sandbox Code Playgroud)
我基本上是在寻找一个 Linq 查询(或上面的方法语法),它将研究加入患者,并将研究设置为空列表或空列表,如果给定患者没有研究。
有任何想法吗?这在 .NET Core 2.2 中有效。此外,上面的 MSFT 链接提到关键突破性更改与客户端评估有关,并避免生成的查询读取整个表,然后必须加入或过滤客户端。然而,通过这个简单的查询,连接应该很容易在服务器端进行。
我一直在努力熟悉实体框架.大部分内容似乎很简单,但我对使用Include方法和默认延迟加载的急切加载之间的区别感到困惑.两者似乎都加载了相关的实体,所以从表面看它们看起来像是做同样的事情.我错过了什么?
如果我有一个客户端域类,并且该客户端有多个课程.我如何找到我正在寻找的课程?例如:
class Client {
String name
static hasMany = [courses:Course]
}
class Course {
String name
static belongsTo = [client:Client]
}
def client = Client.get(1)
Run Code Online (Sandbox Code Playgroud)
我想在那个课程关系中"找到"或"搜索".也许是这样的:
client.courses.find(name:'Whatever')
Run Code Online (Sandbox Code Playgroud)
有没有办法用Grails做到这一点?
我正在尝试实现一个简化的内存缓存"表",其中有两种类型的索引:主要和次要.
主索引将单个键(主键)映射到唯一值(Map接口)
二级索引将单个键映射到值集合(Multimap符合条件)
非常类似于RDBMS世界中的表,其中一个表具有多个查找列.有时您希望通过PK进行搜索,有时会根据公共属性返回行列表.现在,除了equals(=)之外的其他操作没有必要(即没有范围查询或模式匹配).
将缓存语义添加到上述数据结构(逐出,数据填充/缓存加载,刷新等),这几乎是所需要的.
我想问一下你如何最好地解决问题的建议.应该是每个索引缓存还是缓存(对于PK)+(同步)二次索引的Multimap?
任何帮助深表感谢.
问候.