小编bai*_*rog的帖子

如何使用Entity Framework Code First Fluent API指定表名

我有一个实体,我将配置实体框架将其映射到具有不同名称的数据库表.

我可以使用Code First DataAnnotations(DataAnnotations.Schema.TableAttribute)轻松完成此操作.

但由于现在的限制,我必须使用Code First Fluent API(我的域对象将由外部客户端使用,因此它们不应该是特定于技术的 - 例如,对DataAnnotations有任何引用)

我在MSDN上搜索但没有发现任何内容.那有可能吗?怎么样?

谢谢.

c# entity-framework code-first ef-code-first

79
推荐指数
3
解决办法
7万
查看次数

如何在LINQ to Entities for Entity Framework对象中使用谓词

我在我的数据访问层中使用LINQ to Entities for Entity Framework对象.

我的目标是尽可能多地从数据库中过滤,而不将过滤逻辑应用于内存中的结果.

为此,业务逻辑层将谓词传递给数据访问层.

我的意思是

Func<MyEntity, bool>
Run Code Online (Sandbox Code Playgroud)

所以,如果我直接使用这个谓词,就像

public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
    return qry = _Context.MyEntities.Where(x => isMatched(x));
}
Run Code Online (Sandbox Code Playgroud)

我得到了例外

[System.NotSupportedException] --- {"LINQ to Entities中不支持LINQ表达式节点类型'Invoke'."}

该问题的解决方案建议使用LINQKit库中的AsExpandable()方法.

但是再次使用

public IQueryable<MyEntity> GetAllMatchedEntities(Func<MyEntity, Boolean> isMatched)
{
    return qry = _Context.MyEntities.AsExpandable().Where(x => isMatched(x));
}
Run Code Online (Sandbox Code Playgroud)

我得到了例外

无法将类型为"System.Linq.Expressions.FieldExpression"的对象强制转换为"System.Linq.Expressions.LambdaExpression"

有没有办法在LINQ to Entities查询实体框架对象中使用谓词,以便将其正确转换为SQL语句.

谢谢.

c# linq-to-entities entity-framework predicate linqkit

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

无法通过 dotnet build 命令编译模板 C++/CLI (.NET Core 3.1) 项目

  1. 安装最新稳定的Visual Studio 2019 16.4.2(检查.NET Core 开发使用 C++工作负载的桌面开发,并确保选中C++/CLI 支持组件)。
  2. 使用 CLR 类库 (.NET Core) 模板创建新项目(如果您愿意,也可以使用 CLR 空项目 (.NET Core))。
  3. 通过dotnet build命令进行编译将失败(dotnet build CLRNetCoreTest.sln /p:Configuration=Debug /p:Platform=x86): 在此输入图像描述

通过msbuild命令编译成功(“%ProgramFiles(x86)%\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe” CLRNetCoreTest.sln /p:Configuration=Debug /p:Platform=x86)。

这很奇怪 - 我认为dotnet是构建在msbuild之上的包装器..

附上示例项目(运行Build.bat进行编译)。

msbuild c++-cli .net-core visual-studio-2019

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

检测离散GPU

我的目标是使用C#检测多GPU系统上的独立GPU(例如集成的Intel HD Graphics +分立AMD Radeon卡)

我通常使用该代码:

String gpuName = String.Empty;

ManagementObjectCollection objectCollection = 
new ManagementObjectSearcher("SELECT Name FROM Win32_VideoController").Get();

foreach (ManagementObject managementObject in objectCollection)
{
     foreach (PropertyData propertyData in managementObject.Properties)
     {                    
          if ((gpuName == String.Empty) || (propertyData.Value.ToString().ToLower().IndexOf("intel") == -1))
          {
               gpuName = propertyData.Value.ToString();
               break;                   
          } 
     }
}
Run Code Online (Sandbox Code Playgroud)

它就像我上面描述的一个魅力.

但它不适合AMD,VIA等(我不完全知道所有制造商)集成卡.

那么切断所有集成GPU的通用方法是什么?

c# gpu integrated

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

通过System.Data.SQLite和c#多次访问单个SQLite数据库文件

正如我可以从SQLite FAQ中读到的,它支持多个进程读取(SELECT),并且在任何时刻都只支持一个进程写入(INSERT,UPDATE,DELETE)数据库:

SQLite使用读取器/写入器锁来控制对数据库的访问.当任何进程想要写入时,它必须在更新期间锁定整个数据库文件.但这通常只需要几毫秒.其他流程只是等待作者完成然后继续他们的业务

我通过c#使用System.Data.SQLite适配器.

有人可以告诉我PLZ,这个过程到底是怎么回事?

这个过程是否会自动运行,编写SQLiteCommand只会等待另一个SQLiteCommand已经在同一个数据库上执行?

或者它可能会抛出异常?什么样的?

抱歉,但我没有找到有关此机制的信息:)

谢谢.

更新:

我发现帖子说异常会引发一个特定的错误代码

这句话是否正确?

c# database sqlite locking system.data.sqlite

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

如何在 ASP.NET Core 中正确使用 Partial View 并验证其模型状态

我正在使用 ASP.NET Core 5 Razor 页面。

我的目标是拥有一组可以在多个页面上使用的部分视图(出于可重用性目的)。每个部分视图都有一个带有自己的自定义后事件处理程序的表单(它将由包含此部分视图的页面的代码隐藏进行处理)。

注意:有些页面可以包含两个甚至更多不同的局部视图!我需要相互独立地验证部分视图模型(在两个单独的自定义事件处理程序中)。

这是我今天使用的简化代码。部分视图模型(包含用户的一些数据):

public partial class User
{
    [Required]
    public string Name { get; set; }
    [Required]
    public string Surname { get; set; }
}    

public class UserModel : PageModel
{
    [BindProperty]
    public User user { get; set; }
    [TempData]
    public string StatusMessage { get; set; }
    public UserModel()
    {
        user = new User();
    }
}
Run Code Online (Sandbox Code Playgroud)

_UserPartial.cshtml(显示用户数据):

@model UserModel

<div class="row text-warning">
    <div class="col-md-4">
        <form method="post" asp-page-handler="UserEdited"> …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core razor-pages

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

如何通过 EntityFramework 仅更新实体的已更改属性

比方说,我们有一个MyDbContextDbSet<MyEntity>它。我正在尝试实现以下场景(因为我发现它被称为断开连接的场景或断开连接的模式):

  1. List<MyEntity>从数据库中获取(它可以只是DbContext.MyEntities.ToList()通过某些过滤条件的所有记录或记录 - 没关系)。
  2. 然后这些实体被传递到一些用户可以更改属性的 UI。他的行为是不可预测的:他可以改变每个实体的每一个属性,或者他只能改变单个实体的一个属性(他甚至可以根本不做任何改变)。
  3. 之后,我需要将更新传递给数据库。

为了实现该场景,我为我找到了两种可能的解决方案:

1)在整个场景中保持连接打开。所以它会像这样工作:

MyDbContext.Database.Connection.Open();
List<MyEntity> EntitiesList = MyDbContext.MyEntities.ToList();

//passing EntitiesList to the UI, where user can change them
EntitiesList[0].SomeStringProperty = "123";
//change some other properties here

//saving changes to database some time later
MyDbContext.SaveGhanges();
MyDbContext.Database.Connection.Close();
Run Code Online (Sandbox Code Playgroud)

但是在此解决方案中,数据库连接持续打开时间过长。UI 工作时不应打开它(例如,因为用户可以在几个小时内更改实体)。

2) 获取后关闭连接List<MyEntity>并在将更新传递到数据库时再次打开连接。所以它会像这样工作:

MyDbContext.Database.Connection.Open();
List<MyEntity> EntitiesList = MyDbContext.MyEntities.ToList();
MyDbContext.Database.Connection.Close();

//passing EntitiesList to the UI, where user can change them
EntitiesList[0].SomeStringProperty = "123";
//change some other properties here

//saving …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework sql-update

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

GIT 预提交挂钩,在修改/添加的文件中搜索非 UTF-8 编码(如果找到任何文件,则拒绝提交)

我正在使用 Windows 版 Git(和 TortoiseGit)。

我的目标是防止提交修改/添加至少一个非 UTF-8 文件。

  • 枚举修改/添加的文件:我找到了以下代码

    { git diff --name-only ; git diff --name-only --staged ; }
    
    Run Code Online (Sandbox Code Playgroud)

    这是最好的(正确且最简洁的)方法吗?

  • 搜索非 UTF-8 文件:我找到了以下代码

    { git diff --name-only ; git diff --name-only --staged ; } | xargs -I {} bash -c "iconv -f utf-8 -t utf-16 {} &>/dev/null || echo {} - is non-UTF8!"
    
    Run Code Online (Sandbox Code Playgroud)

    如果我在存储库根文件夹中启动 Git Bash - 它会起作用(显示每个非 UTF-8 文件)。所以我将上面的代码重命名.git/hooks/pre-commit.sample为并复制粘贴。.git/hooks/pre-commit提交更改后,TortoiseGit 提交 gui 窗口中不会显示任何特殊内容。所以看起来预提交挂钩无法正常工作。

  • 如果存在任何非 UTF-8 文件,则拒绝提交:显示所有非 UTP-8 文件后,应拒绝提交。但我不知道如何做到这一点(显示一些退出代码 - 但如何?)。

因此,我们将不胜感激任何帮助。

windows git bash pre-commit-hook git-bash

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

如何在 ASP .Net Core 3.1 MVC 应用程序中调试 JavaScript(Razor 视图 - *.cshtml)?

我有最新的Visual Studio 2019 16.5.4 Enterprise

我刚刚从模板(使用默认设置)创建了一个ASP .Net Core 3.1 MVC应用程序。

我已将一些 JavaScript 代码添加到主页的Index.cshtml中:

@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center">
    <h1 class="display-4">Welcome</h1>
    <p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>


@section Scripts {
    <script>
        function GetJSON_Simple() {
            var resp = [];           
            return resp;
        }

        debugger;
        var simpleData = GetJSON_Simple();

    </script>
}
Run Code Online (Sandbox Code Playgroud)

而且我无法调试 JavaScript 代码(里面的断点GetJSON_Simple函数体内的断点或var simpleData = GetJSON_Simple()永远不会被命中)。我尝试过 Chrome 和 MS Edge (Chromium)。

根据这篇文章使用 Razor (ASP.NET) …

debugging razor asp.net-core razor-pages visual-studio-2019

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

使用Process.Start()通过外部程序启动代码时进行调试

假设我有一个C#WinForms应用程序,它只是通过使用外部程序启动Process.Start(MyModule.exe).

我试图通过使用我的项目属性调试我的代码- > 调试 - > 启动操作 - > 启动外部程序(当然设置正确的工作目录).

我的另一个尝试是Debug - > Attach to process

更新:我的模块和外部程序都使用一个资源.所以外部程序释放它,然后调用Process.Start(),等待我的进程退出ans然后再次捕获资源.所以当你的程序已经运行时我无法附加.

它们都失败了 - Program.cs中的断点从未被击中.

那么,在这种情况下如何调试我的代码呢?

c# debugging external-process process.start

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

获取删除的行数和DbContext.SaveChanges()编辑的行数

我使用实体框架6.1和Code First方法.当我使用DbContext.SaveChanges()作为结果我可以得到

写入底层数据库的对象数.

但是可以获得高级统计数据:删除的行数,编辑的行数,添加的行数?

我的超级目标是获得每个实体的静态.

也许在实际调用SaveChanges()之前..

c# entity-framework ef-code-first

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

如何在 C# 和 Npgsql 中使用不带双引号的 PostgreSQL 表名

我正在尝试使用 Npgsql2 库从 PostgreSQL 10.5 数据库中选择数据 - 我无法使用 Npgsql3 或 Npgsql4,因为我需要支持 Windows XP(最高 .NET 4.0)。\n我使用以下代码:

\n\n
var builder = new NpgsqlConnectionStringBuilder();\n//setting connection string variables here\nvar connection = new NpgsqlConnection(builder.Tostring());\nvar query = "SELECT * FROM \\"TableName\\" ORDER BY \\"ColumnName\\"";\nvar adapter = new NpgsqlDataAdapter(query, connection);\nvar dataSet = new DataSet();\n\nconnection.Open();\nadapter.Fill(dataSet);\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我在查询中没有对 TableName 或 ColumnName 使用双引号 - 则会失败并出现错误:

\n\n
\n

PostgreSQL 错误:42P01:关系 \xe2\x80\x9cTableName\xe2\x80\x9d 不存在

\n
\n\n

用双引号就可以了。

\n\n

那么是否可以使用不带双引号的Npgsql呢?有旗帜什么的吗?

\n

c# postgresql npgsql

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

查找 Visual C++ 工具的包含 Visual Studio 2017 的文件夹位置

在VS2017中Visual C++ Tools的位置有新的安装模式

现在它位于 C:\Program Files (x86)\Microsoft Visual Studio\2017\ Enterprise \VC\Tools\MSVC\14 之类的地方。11.25203。或者它可以是例如 C:\Program Files (x86)\Microsoft Visual Studio\2017\ Community \VC\Tools\MSVC\14。10.25017。所以完整路径取决于 VS2017版本和内部版本号

有一个宏$(VCInstallDir)指向..\VC** 文件夹。但我需要知道完整路径,包括取决于 VS2017 **build number 的部分。我需要这个来找到 Visual C++ 工具的包含文件夹。

那么我可以在不调用 VS2017 命令提示符 (VCVARSALL.BAT) 或 PowerShell 脚本等的情况下确定此路径吗?是否有一些 VS 宏可以简单地放入我的项目的VC++ Directory\Additional Directory属性中?

c++ include visual-studio visual-studio-2017

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