我有一个实体,我将配置实体框架将其映射到具有不同名称的数据库表.
我可以使用Code First DataAnnotations(DataAnnotations.Schema.TableAttribute)轻松完成此操作.
但由于现在的限制,我必须使用Code First Fluent API(我的域对象将由外部客户端使用,因此它们不应该是特定于技术的 - 例如,对DataAnnotations有任何引用)
我在MSDN上搜索但没有发现任何内容.那有可能吗?怎么样?
谢谢.
我在我的数据访问层中使用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语句.
谢谢.
通过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进行编译)。
我的目标是使用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的通用方法是什么?
正如我可以从SQLite FAQ中读到的,它支持多个进程读取(SELECT),并且在任何时刻都只支持一个进程写入(INSERT,UPDATE,DELETE)数据库:
SQLite使用读取器/写入器锁来控制对数据库的访问.当任何进程想要写入时,它必须在更新期间锁定整个数据库文件.但这通常只需要几毫秒.其他流程只是等待作者完成然后继续他们的业务
我通过c#使用System.Data.SQLite适配器.
有人可以告诉我PLZ,这个过程到底是怎么回事?
这个过程是否会自动运行,编写SQLiteCommand只会等待另一个SQLiteCommand已经在同一个数据库上执行?
或者它可能会抛出异常?什么样的?
抱歉,但我没有找到有关此机制的信息:)
谢谢.
更新:
我发现帖子说异常会引发一个特定的错误代码
这句话是否正确?
我正在使用 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) 比方说,我们有一个MyDbContext
有DbSet<MyEntity>
它。我正在尝试实现以下场景(因为我发现它被称为断开连接的场景或断开连接的模式):
List<MyEntity>
从数据库中获取(它可以只是DbContext.MyEntities.ToList()
通过某些过滤条件的所有记录或记录 - 没关系)。为了实现该场景,我为我找到了两种可能的解决方案:
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) 我正在使用 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 文件后,应拒绝提交。但我不知道如何做到这一点(显示一些退出代码 - 但如何?)。
因此,我们将不胜感激任何帮助。
我有最新的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) …
假设我有一个C#WinForms应用程序,它只是通过使用外部程序启动Process.Start(MyModule.exe)
.
我试图通过使用我的项目属性调试我的代码- > 调试 - > 启动操作 - > 启动外部程序(当然设置正确的工作目录).
我的另一个尝试是Debug - > Attach to process
更新:我的模块和外部程序都使用一个资源.所以外部程序释放它,然后调用Process.Start(),等待我的进程退出ans然后再次捕获资源.所以当你的程序已经运行时我无法附加.
它们都失败了 - Program.cs中的断点从未被击中.
那么,在这种情况下如何调试我的代码呢?
我使用实体框架6.1和Code First方法.当我使用DbContext.SaveChanges()作为结果我可以得到
写入底层数据库的对象数.
但是可以获得高级统计数据:删除的行数,编辑的行数,添加的行数?
我的超级目标是获得每个实体的静态.
也许在实际调用SaveChanges()之前..
我正在尝试使用 Npgsql2 库从 PostgreSQL 10.5 数据库中选择数据 - 我无法使用 Npgsql3 或 Npgsql4,因为我需要支持 Windows XP(最高 .NET 4.0)。\n我使用以下代码:
\n\nvar 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\n\nPostgreSQL 错误:42P01:关系 \xe2\x80\x9cTableName\xe2\x80\x9d 不存在
\n
用双引号就可以了。
\n\n那么是否可以使用不带双引号的Npgsql呢?有旗帜什么的吗?
\n在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# ×9
asp.net-core ×2
debugging ×2
razor-pages ×2
.net-core ×1
bash ×1
c++ ×1
c++-cli ×1
code-first ×1
database ×1
git ×1
git-bash ×1
gpu ×1
include ×1
integrated ×1
linqkit ×1
locking ×1
msbuild ×1
npgsql ×1
postgresql ×1
predicate ×1
razor ×1
sql-update ×1
sqlite ×1
windows ×1