小编Álv*_*cía的帖子

如何以N:N关系手动加载相关实体?

我正在使用EF5,当关系为1:N时,如果我想加载相关实体,我会执行以下操作:

此时,EF使用相关实体填充主要实体的属性导航.另外,在每个实体的类型的本地属性中,dbContext我拥有每种类型的所有实体.

但是,如果我使用N:N关系做同样的事情,我没有关系中间表的实体,当我执行查询时,我在dbContext每个类型的实体的本地执行,但是未填充属性导航.

我想知道为什么以及它是否存在替代方案.

我使用这种方式是因为我想使用T-SQL来创建动态查询.如果我使用预先加载,那么动态查询的灵活性与使用TSQL时不同,效率较低.如果我使用显式加载我做N个额外的查询,主要实体的结果中的每个记录之一用我的方式,我只有一个额外的查询,因为我一次得到所有相关的实体.如果我使用延迟加载我有同样的问题,N个额外的查询.

当关系为N:N时,为什么EF不会填充相关属性?

谢谢.

c# many-to-many entity-framework-5

5
推荐指数
1
解决办法
1935
查看次数

如何在调试时看到IEnumerable的元素?

我正在使用IEnumerable,在调试器中我想看到它有的项目,但我不能,因为没有任何属性也没有项目.

是否可以看到具有IEnumerable的项目?

c# debugging visual-studio

5
推荐指数
3
解决办法
2828
查看次数

是否可以在 PC 的共享文件夹中使用 SQLite 数据库?

我正在开发一个 UWP 应用程序(Windows 手机 10),并且我在 LAN 中的 PC 的共享文件夹中有一个 SQLite 数据库。我想知道我是否可以在 windows phone 应用程序中使用这个数据库,就像我在我的 WPF 应用程序中所做的那样,我可以设置数据库的路径,我可以在我的局域网中的任何计算机上使用它。

谢谢。

c# sqlite windows-phone win-universal-app windows-10-mobile

5
推荐指数
2
解决办法
6531
查看次数

我无法在.net 4.7项目中使用System.Runtime 4.3.0

我有一个.net 4.7项目,它安装了System.Runtime的4.3.0版本.但是当我运行项目时,我得到一个异常,说它找不到版本4.1.0.0.

如果我去nuget管理器,我在项目中安装了4.1.0.0版本,然后就可以了.所以我试图再次更新到4.3.0版本,但同样,我遇到了问题.

该项目一直工作到现在,我真的不知道为什么它停止工作,因为我没有触及任何与nuget包相关的东西.

此外,我试图创建一个新的空解决方案并添加项目,尝试一个新的解决方案,但问题是相同的.

我怎么能解决这个问题?

谢谢.

c# visual-studio nuget

5
推荐指数
1
解决办法
1393
查看次数

检查方法的参数时是否抛出异常?

我想在使用它们之前检查方法的所有参数是否都有正确的信息.像这样的东西:

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)

然而,在这篇文章中,有人评论说将异常作为正常流程抛出并不是一个好主意,但我不确定是否是这种情况,因为如果我必须检查参数,还有例如ArgumentNullExceptionArgumentException它似乎可以在参数出现问题时被抛出,这让我想知道它是否真的是一个糟糕的方法,我评论的例子.

另一个用户给出的另一个原因是异常消耗4000-8000个CPU周期.好吧,在我的情况下的目标是知道参数是否有一些错误,并且如果应用程序按预期工作,则永远不会抛出异常,因此在实践中,如果应用程序没有错误,那么性能不会减少.

总而言之,我想知道在继续该过程之前如何处理参数检查的最佳方法.

谢谢.

c# exception

5
推荐指数
1
解决办法
124
查看次数

如果源为空,Parallel.ForEach是否启动线程?

我用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或是否需要它是一个好的做法?

c# task-parallel-library

5
推荐指数
1
解决办法
279
查看次数

从日期时间获取星期数

我试图从日期时间获取星期数,在我的情况下,一周的第一天是星期一,我想遵循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属于同一周,这是正确的第一周,所以我不明白为什么我可以在同一日期获得两个不同的结果。

我怎么总是能得到正确的结果?还是获取任何日期的星期数的正确方法是什么?

c# week-number

5
推荐指数
1
解决办法
209
查看次数

如何使用OPC UA和C#获取节点的值?

我有一个西门子 TP1200 Comfort 面板,我已将其配置为 OPC AU 服务器。该面板有一些标签(节点),我想从中获取 C# 应用程序的值。

我已阅读 OPC UA github 项目的示例: https: //github.com/OPCFoundation/UA-.NETStandard

我能够连接到面板并获取根,但是如果我调试并检查根的结构,我看不到该值的任何属性,也没有看到子节点的集合,所以我不知道如何通过名称查找节点。

有没有类似 GetNodeVale(NodeName); 的方法

我没有显示任何代码,因为我真的迷失了 OPC,这是我第一次尝试实现一个简单的客户端,我想在其中读取节点(标签)的代码,但我无法做到这一点。

谢谢。

c# opc opc-ua siemens

5
推荐指数
2
解决办法
4590
查看次数

如何更改所选数据网格行的蓝色

好吧,我已经看到这个代码来做到这一点:

<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属性是针对其他情况的,但是我添加的代码可以影响结果.

我想更改选定的行背景,默认情况下是蓝色,我想根据某些条件使用其他颜色.例如,如果添加了一个寄存器,那么如果我选择该行它将为绿色,如果未选中该行,则它将为浅绿色.

我可以根据需要更改行的颜色,但是当我选择它时,总是蓝色.

谢谢.

wpf datagrid

4
推荐指数
1
解决办法
9541
查看次数

WCF和不活动超时:是否可以禁用不活动超时?

我有一个将永远运行的服务,如果有客户端或不能访问此服务,但在很长一段时间没有客户端活动之后,能够与客户端连接.

这是因为,例如,在假期后,我希望能够连接服务,而无需手动重启服务.

目前,如果10分钟内没有收到任何连接,我的服务就会断开连接,但我不想指定任何时间,我想要无限时间.

谢谢.

wcf timeout

4
推荐指数
1
解决办法
8533
查看次数