小编Ghi*_*nio的帖子

EF Linq to Entities在实体集上调用ToList()会生成包含多个左外连接的SQL命令

我的实体"Progetto"映射名为VW_AMY_PRG_WCS_Lookup的视图

在此输入图像描述

Progetto拥有五个导航属性:ClienteDiFatturazione,ClienteDiLavorazione,PercentualeSuccesso,Agente具有多重性0..1和DocumentiWcs具有mupltiplicity*

当我在LINQPad中运行这个简单的语句时

var prj = Progetti.AsQueryable(); 
prj.ToList();
Run Code Online (Sandbox Code Playgroud)

生成的sql是

SELECT 
    [Extent1].[IdProgetto] AS [IdProgetto], 
    [Extent1].[IdSerie_Progetto] AS [IdSerie_Progetto], 
    [Extent1].[Importo] AS [Importo], 
    [Extent1].[Data_Prevista_Chiusura] AS [Data_Prevista_Chiusura], 
    [Extent1].[IdStato] AS [IdStato], 
    [Extent1].[Oggetto] AS [Oggetto], 
    [Extent1].[IdMezzo_Pervenuto] AS [IdMezzo_Pervenuto], 
    [Extent1].[IdAgente] AS [IdAgente], 
    [Extent1].[Fido_Residuo] AS [Fido_Residuo], 
    [Extent2].[IdAnagrafica_Fatturazione] AS [IdAnagrafica_Fatturazione], 
    [Extent3].[IdAnagrafica_Lavorazione] AS [IdAnagrafica_Lavorazione], 
    [Extent4].[IdPercentuale_Successo] AS [IdPercentuale_Successo]
    FROM    (SELECT 
    [VW_AMY_PRG_WCS_Lookup].[IdProgetto] AS [IdProgetto], 
    [VW_AMY_PRG_WCS_Lookup].[IdSerie_Progetto] AS [IdSerie_Progetto], 
    [VW_AMY_PRG_WCS_Lookup].[Importo] AS [Importo], 
    [VW_AMY_PRG_WCS_Lookup].[IdPercentuale_Successo] AS [IdPercentuale_Successo], 
    [VW_AMY_PRG_WCS_Lookup].[Data_Prevista_Chiusura] AS [Data_Prevista_Chiusura], 
    [VW_AMY_PRG_WCS_Lookup].[IdAnagrafica_Lavorazione] AS [IdAnagrafica_Lavorazione], 
    [VW_AMY_PRG_WCS_Lookup].[IdAnagrafica_Fatturazione] AS [IdAnagrafica_Fatturazione], 
    [VW_AMY_PRG_WCS_Lookup].[IdMezzo_Pervenuto] AS [IdMezzo_Pervenuto], 
    [VW_AMY_PRG_WCS_Lookup].[IdStato] AS [IdStato], 
    [VW_AMY_PRG_WCS_Lookup].[Oggetto] …
Run Code Online (Sandbox Code Playgroud)

.net c# linq ado.net entity-framework

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

特定子类型不需要工厂CreateInstance参数方法

我有一个工厂类和CreateInstance方法

CreateInstance(EntityModel.TipoEntitaTipoParametroEntita tipoParametroEntita, IParametroEntitaMultiValoreDataSourceProvider parametroEntitaMultiValoreDataSourceProvider)
Run Code Online (Sandbox Code Playgroud)

工厂可以根据值来实例化两个不同的子类型 tipoParametroEntita.TipoCampo.IdTipoCampo

要点是CreateInstance(parametroEntitaMultiValoreDataSourceProvider)的第二个参数仅用于创建实例,TipoEntitaTipoParametroEntitaMultiValore
而不用于创建实例TipoEntitaTipoParametroEntitaSingoloValore

public class TipoEntitaTipoParametroEntitaFactory : ITipoEntitaTipoParametroEntitaFactory
{
    /// <summary>
    /// Creates an instance of TipoEntitaTipoParametroEntitaSingoloValore or  TipoEntitaTipoParametroEntitaMultiValore 
    /// </summary>
    public TipoEntitaTipoParametroEntita CreateInstance(EntityModel.TipoEntitaTipoParametroEntita tipoParametroEntita, IParametroEntitaMultiValoreDataSourceProvider parametroEntitaMultiValoreDataSourceProvider)
    {
        if (tipoParametroEntita.TipoCampo.IdTipoCampo == (int)EntityModel.Enum.TipoCampo.CampoLibero ||
            tipoParametroEntita.TipoCampo.IdTipoCampo == (int)EntityModel.Enum.TipoCampo.CampoLiberoMultiLinea)
        {
            return new TipoEntitaTipoParametroEntitaSingoloValore(tipoParametroEntita);
        }

        if (tipoParametroEntita.TipoCampo.IdTipoCampo ==
            (int)EntityModel.Enum.TipoCampo.DropdownListQueryDataSource ||
            tipoParametroEntita.TipoCampo.IdTipoCampo ==
            (int)EntityModel.Enum.TipoCampo.DropdownListTableDataSource)
        {
            return new TipoEntitaTipoParametroEntitaMultiValore(tipoParametroEntita,
                parametroEntitaMultiValoreDataSourceProvider);
        }

        return null;

    }
}
Run Code Online (Sandbox Code Playgroud)

我对这种采用的模式表示怀疑,因为我总是需要传递一个实例,IParametroEntitaMultiValoreDataSourceProvider即使它不是必需的,而且读取方法签名的人可能会认为创建任何类型TipoEntitaTipoParametroEntita的实例IParametroEntitaMultiValoreDataSourceProvider都是必需的.

什么是更好的方法?两个不同的工厂?只有一个工厂和两个CreateInstance(一个返回TipoEntitaTipoParametroEntitaSingoloValore …

.net c# architecture design-patterns factory-pattern

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

Visual Studio WLS2 调试和命令行参数

我正在尝试在 Visual Studio 2019 和 WLS2 中调试 .net core 控制台应用程序。控制台应用程序在启动时需要命令行参数。

这是我的launchSettings.json

{
  "profiles": {
    "ConsoleApp": {
      "commandName": "Project",
      "commandLineArgs": "--s",
    },
    "WSL 2": {
      "commandName": "WSL2",
      "commandLineArgs": "--s",
      "distributionName": ""
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

使用“ConsoleApp”配置文件启动调试会话,应用程序控制台按预期获取参数“--s”,但使用“WSL 2”配置文件在 WSL 中执行调试时,我收到以下消息:

Unknown option: --s

.NET Core SDK (3.1.404)

Usage: dotnet [runtime-options] [path-to-application] [arguments]
Run Code Online (Sandbox Code Playgroud)

.net c# visual-studio-debugging .net-core wsl-2

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

异常消息是On数据上下文类型,有一个顶级IQueryable属性,其元素类型不是实体类型

我建立了我在IIS 7中托管的WCFDataService,我将使用Reflection Provider作为数据源提供者.我的示例工作,如果我将实体类型定义保持在我定义服务的同一个程序集中,但是如果我将实体类型移动到另一个引用的程序集并且出现以下错误则不起作用

"服务器遇到处理请求的错误.异常消息是'在数据上下文类型'EntityContainer',有一个顶级IQueryable属性'Cats',其元素类型不是实体类型"

服务

public class WcfDataService1 : DataService<EntityContainer>
    {

        public static void InitializeService(DataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("Cats", EntitySetRights.AllRead);
            config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;

        }
    }
Run Code Online (Sandbox Code Playgroud)

实体容器

public class EntityContainer
    {
        public IQueryable<Cat> Cats
        {
            get
            {
                var s = new List<Cat>();
                var c1 = new Cat {Id = 1, Name = "Fufi"};
                var c2 = new Cat {Id = 1, Name = "Felix"};
                s.Add(c1);
                s.Add(c2);
                return s.AsQueryable();
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

实体类型

[DataServiceKey("Id")]
public  class Cat 
{
     public int Id { get; …
Run Code Online (Sandbox Code Playgroud)

.net c# wcf wcf-data-services odata

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

声明要在实体接口中忽略的属性 (EF Core)

EF 核心 2.2

有这个界面:

public interface INotPersistingProperties
{
   string MyNotPersistingPropertyA { get; set; }
   string MyNotPersistingPropertyB  { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以及许多实现该接口的实体

public class MyEntity : INotPersistingProperties
{
  public int Id { get; set; }
  public string MyNotPersistingPropertyA { get; set; }
  public string MyNotPersistingPropertyB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

对于所有实现 INotPersistingProperties 的实体,是否有机会自动忽略这些属性(使用 Fluent API)?

.net c# entity-framework-core .net-core

4
推荐指数
2
解决办法
2万
查看次数

将字符串“ 1”或“ 0”转换为布尔值true或false

Convert.ChangeType("1", typeof(bool)) 返回运行时错误

有什么方法可以覆盖此行为?

我想要Convert.ChangeType("1", typeof(bool)) return真正的 Convert.ChangeType("0", typeof(bool))回报false

更新
阅读评论和答案也许我还不够清楚

假设有一个字典,<object,Type>其中type是目标类型

foreach (var element in dictionary)
{
   object convVal = Convert.ChangeType(element.Key, element.Value);
}
Run Code Online (Sandbox Code Playgroud)

element.Key"1"elemen.Valuebool我想获得true

任何人都可以给我任何建议以实施类似行为

至少比这更好的一点是:

 public static class Convert
    {
        public static object ChangeType(object val, Type type)
        {
            if (val is string && type == typeof(bool))
            {

                switch (((string)val).Trim().ToUpper())
                {
                    case "TRUE":
                    case "YES":
                    case "1":
                    case "-1":
                        return true;

                    default:
                        return false; …
Run Code Online (Sandbox Code Playgroud)

.net c#

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