我正在使用EF5,当关系为1:N时,如果我想加载相关实体,我会执行以下操作:
使用T-SQL,我从数据库加载带有T-SQL的主要实体,如下所示:
select *
from MainEntities
where ...
Run Code Online (Sandbox Code Playgroud)使用T-SQL我加载相关的实体
select *
from RelatedEntities
where IDMainEntity IN (---)
Run Code Online (Sandbox Code Playgroud)此时,EF使用相关实体填充主要实体的属性导航.另外,在每个实体的类型的本地属性中,dbContext
我拥有每种类型的所有实体.
但是,如果我使用N:N关系做同样的事情,我没有关系中间表的实体,当我执行查询时,我在dbContext
每个类型的实体的本地执行,但是未填充属性导航.
我想知道为什么以及它是否存在替代方案.
我使用这种方式是因为我想使用T-SQL来创建动态查询.如果我使用预先加载,那么动态查询的灵活性与使用TSQL时不同,效率较低.如果我使用显式加载我做N个额外的查询,主要实体的结果中的每个记录之一用我的方式,我只有一个额外的查询,因为我一次得到所有相关的实体.如果我使用延迟加载我有同样的问题,N个额外的查询.
当关系为N:N时,为什么EF不会填充相关属性?
谢谢.
我正在使用IEnumerable,在调试器中我想看到它有的项目,但我不能,因为没有任何属性也没有项目.
是否可以看到具有IEnumerable的项目?
我正在开发一个 UWP 应用程序(Windows 手机 10),并且我在 LAN 中的 PC 的共享文件夹中有一个 SQLite 数据库。我想知道我是否可以在 windows phone 应用程序中使用这个数据库,就像我在我的 WPF 应用程序中所做的那样,我可以设置数据库的路径,我可以在我的局域网中的任何计算机上使用它。
谢谢。
我有一个.net 4.7项目,它安装了System.Runtime的4.3.0版本.但是当我运行项目时,我得到一个异常,说它找不到版本4.1.0.0.
如果我去nuget管理器,我在项目中安装了4.1.0.0版本,然后就可以了.所以我试图再次更新到4.3.0版本,但同样,我遇到了问题.
该项目一直工作到现在,我真的不知道为什么它停止工作,因为我没有触及任何与nuget包相关的东西.
此外,我试图创建一个新的空解决方案并添加项目,尝试一个新的解决方案,但问题是相同的.
我怎么能解决这个问题?
谢谢.
我想在使用它们之前检查方法的所有参数是否都有正确的信息.像这样的东西:
public method(MyType param1)
{
try
{
if(param1 == null)
{
throw new ArgumentNullException("Error1");
}
if(param1.Property1 == null)
{
throw new ArgumentNullException("Error2");
}
if(param1.Property1.Amount <= 0)
{
throw new ArgumentException("Error3");
}
...
//Do what I need with the parameter
}
catch { throw; }
}
Run Code Online (Sandbox Code Playgroud)
然而,在这篇文章中,有人评论说将异常作为正常流程抛出并不是一个好主意,但我不确定是否是这种情况,因为如果我必须检查参数,还有例如ArgumentNullException
和ArgumentException
它似乎可以在参数出现问题时被抛出,这让我想知道它是否真的是一个糟糕的方法,我评论的例子.
另一个用户给出的另一个原因是异常消耗4000-8000个CPU周期.好吧,在我的情况下的目标是知道参数是否有一些错误,并且如果应用程序按预期工作,则永远不会抛出异常,因此在实践中,如果应用程序没有错误,那么性能不会减少.
总而言之,我想知道在继续该过程之前如何处理参数检查的最佳方法.
谢谢.
我用Parallel.ForEach
这样的方式:
public void myMethod(IEnumerable<MyType> paramIeCollection)
{
Parallel.Foreach(paramIeCollection,
(iterator) =>
{
//Do something
});
}
Run Code Online (Sandbox Code Playgroud)
我想知道什么时候paramIeCollection
是空的,Parallel.ForEach
无论如何都是启动并从线程池中获取线程并消耗资源,或者如果它首先检查集合中是否有项目.
如果没有检查,为了避免这种情况,我在想这个代码:
if(paramIeCollection.count > 0)
{
//run Parallel.Foreach
}
Run Code Online (Sandbox Code Playgroud)
所以问题是,在调用之前检查集合是否有项目Parallel.ForEach
或是否需要它是一个好的做法?
我试图从日期时间获取星期数,在我的情况下,一周的第一天是星期一,我想遵循FirstFourDays约定。
要检查结果,请检查以下网页:
https://espanol.epochconverter.com/semanas/2020
要获取星期数,我使用以下方法:
System.Globalization.CultureInfo.InvariantCulture.Calendar.GetWeekOfYear();
Run Code Online (Sandbox Code Playgroud)
所以我想获取日期2019-12-29的星期数,所以我使用以下代码:
System.Globalization.CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(new DateTime(2019, 12, 29), System.Globalization.CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
Run Code Online (Sandbox Code Playgroud)
结果是第52周。这是正确的。
现在我正在尝试获取2019-12-30的星期数,我得到的星期数是53,这是错误的,因为2019只有52周。实际上,2019-12-30与2020-01-01属于同一周,这是正确的第一周,所以我不明白为什么我可以在同一日期获得两个不同的结果。
我怎么总是能得到正确的结果?还是获取任何日期的星期数的正确方法是什么?
我有一个西门子 TP1200 Comfort 面板,我已将其配置为 OPC AU 服务器。该面板有一些标签(节点),我想从中获取 C# 应用程序的值。
我已阅读 OPC UA github 项目的示例: https: //github.com/OPCFoundation/UA-.NETStandard。
我能够连接到面板并获取根,但是如果我调试并检查根的结构,我看不到该值的任何属性,也没有看到子节点的集合,所以我不知道如何通过名称查找节点。
有没有类似 GetNodeVale(NodeName); 的方法
我没有显示任何代码,因为我真的迷失了 OPC,这是我第一次尝试实现一个简单的客户端,我想在其中读取节点(标签)的代码,但我无法做到这一点。
谢谢。
好吧,我已经看到这个代码来做到这一点:
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="Green">
</Setter>
</Trigger>
</Style.Triggers>
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource ucComponentesColorFilaMultiValueConverter}">
<Binding ElementName="dgdComponentes" Path="ItemsSource" />
<Binding ElementName="dgdComponentes" Path="SelectedItems" />
<Binding ElementName="CurrentItem" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</DataGrid.RowStyle>
Run Code Online (Sandbox Code Playgroud)
真的是代码是样式触发器,setter属性是针对其他情况的,但是我添加的代码可以影响结果.
我想更改选定的行背景,默认情况下是蓝色,我想根据某些条件使用其他颜色.例如,如果添加了一个寄存器,那么如果我选择该行它将为绿色,如果未选中该行,则它将为浅绿色.
我可以根据需要更改行的颜色,但是当我选择它时,总是蓝色.
谢谢.
我有一个将永远运行的服务,如果有客户端或不能访问此服务,但在很长一段时间没有客户端活动之后,能够与客户端连接.
这是因为,例如,在假期后,我希望能够连接服务,而无需手动重启服务.
目前,如果10分钟内没有收到任何连接,我的服务就会断开连接,但我不想指定任何时间,我想要无限时间.
谢谢.