我试图首先使用Entity Framework代码来处理一个简单的数据库项目,然后遇到一个我根本想不通的问题.
我注意到EF正在为我的表设置ID,每次自动增加1,完全忽略我为该字段手动输入的值.经过一些搜索,我的理解是,正确的方法是禁用此行为:
modelBuilder.Entity<Event>().Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
Run Code Online (Sandbox Code Playgroud)
但是现在我只是得到了这个错误,我不明白为什么:
未处理的异常:System.Data.Entity.Infrastructure.DbUpdateException:更新条目时发生错误.有关详细信息,请参阅内部异常 ---
System.Data.UpdateException:更新条目时发生错误.有关详细信息,请参阅内部异常 ---> System.Data.SqlClient.SqlException:当IDENTITY_INSERT设置为OFF时,无法在表'Events'中为identity列插入显式值.
如果它有用,这是有问题的POCO类:
public class Event
{
[Key, Required]
public int EventID { get; set; }
public string EventType { get; set; } //TODO: Event Type Table later on
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public virtual ICollection<Match> Matches { get; set; }
public virtual ICollection<EventParticipation> EventParticipation { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
开放类型List<>
和IEnumerable<>
?之间有什么关系吗?
例:
var type1 = typeof(List<>);
var type2 = typeof(IEnumerable<>);
//return false
type2.IsAssignableFrom(type1);
Run Code Online (Sandbox Code Playgroud)
有没有任何方法可以检查两种开放类型之间的关系,或者关系只存在于封闭类型上?
假设我有以下(虚构的!)PS 脚本:
$par = [...]
New-Connection `
-Server $par.Server `
-User $par.User `
-Pwd $par.Pwd `
- [...]
Run Code Online (Sandbox Code Playgroud)
如果$par.Pwd
为空或为空,New-Connection
将抛出错误。
所以,我只想包括这个参数,如果$par.Pwd
有一个值。由于有很多(!)参数,它们可能是空的,我不想以 1000 种不同的变体编写命令。我想到了某事。
New-Connection `
-Server $par.Server `
-User $par.User `
$(if ($par.Pwd) {-Pwd $par.Pwd})
Run Code Online (Sandbox Code Playgroud)
但这不起作用。
Powershell 可以监听并捕获按键吗?
是否可以编写一个 PowerShell 脚本,就像AutoHotkey一样,位于托盘中并等待您按下预定义的键盘键才开始执行?并且每次按下所述键时可能不会返回而是触发?
我想要实现的是 - 仅在启动脚本后按下按钮才执行预定义的脚本操作,因此将其放在桌面上并定义快捷键是行不通的。
例如:
我希望每次按“x”键时输入 3 次文本“TEST”,但我希望仅当执行此操作的脚本正在运行时才会发生这种情况。因此,当脚本未运行时 - 按“x”不会执行任何操作。
基本上,AutoHotkey 可以完全做到这一点,但如果可能的话,我想在 PowerShell 中执行此操作,而无需编写大量 C# 代码,因为那样我只需为此编写一个小型 C# 托盘应用程序。
我知道,有很多关于此的文章,但我仍然找不到解决方案来解决这个问题。我已经在我的机器上使用openssl生成了一个PFX-文件,如下所示:
openssl x509 -req -days 365 -in "myReqest.csr" -signkey "myPrivateKey.pem" -out "myCertificate.crt"
openssl pkcs12 -export -out "myCertificate.pfx" -inkey "myPrivateKey.pem" -in "myCertificate.crt" -certfile "myCertificate.crt"
Run Code Online (Sandbox Code Playgroud)
在我的C#应用中,我这样访问私钥:
var cert = new X509Certificate2("myCertificate.pfx", "myPassword");
cert.HasPrivateKey; // This is always true!
cert.PrivateKey; // Works on my machine (only)
Run Code Online (Sandbox Code Playgroud)
这在我的机器上工作得很好,但是当我在另一台机器上运行相同的代码时,它抛出:“找不到密钥集”,即使HasPrivateKey
返回了true
!私钥不应该包含在* .pfx文件中吗?你能告诉我吗:
创建我时,openssl是否将证书/私钥以某种方式自动安装在我的计算机上?
如何从* .PFX文件(或从* .PEM文件)读取私钥?
StackTrace的异常:
at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContaier)
at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContaier, …
Run Code Online (Sandbox Code Playgroud) 使用标准C#代码和命令时出现以下问题:
Uri.EscapeUriString("[]")
Run Code Online (Sandbox Code Playgroud)
我明白了:
"[]"
Run Code Online (Sandbox Code Playgroud)
但是当我使用PowerShell时:
[Uri]::EscapeUriString("[]")
Run Code Online (Sandbox Code Playgroud)
我明白了
"%5B%5D"
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这些方法调用的区别吗?为什么我会得到不同的结果?如何强制PowerShell返回与标准c#相同的结果?提前致谢
假设我有以下字符串:
c:\testmypath
Run Code Online (Sandbox Code Playgroud)
在 C# 中,如果我想在没有标签的情况下使用内部代码,我可以执行以下操作:
string t = @"c:\testmypath";
Run Code Online (Sandbox Code Playgroud)
但是,如果我想从配置文件中读取它;假设一个appsettings.json
看起来像这样:
{
"MyPath": "c:\testmypath"
}
Run Code Online (Sandbox Code Playgroud)
以下代码导致在控制台中显示一个选项卡:
static void Main(string[] args)
{
var path = returnString();
Console.WriteLine(path);
Console.ReadLine();
}
static string returnString()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
var configuration = builder.Build();
return configuration["MyPath"];
}
Run Code Online (Sandbox Code Playgroud)
我可以通过转义配置文件中的路径来解决这个问题;例如:
{
"MyPath": "c:\\testmypath"
}
Run Code Online (Sandbox Code Playgroud)
通过,我可以以某种方式逃避单斜杠版本吗?我试过了:
return @configuration["MyPath"];
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,它确实可以编译,但没有任何效果。我也试过.ToString()
,虽然我不确定为什么我认为这会奏效。
我们有一个内部 Excel 插件,定期在多个 UNC 目录中部署。每个副本都设置为只读,以便用户无法意外更改。“部署”过程涉及进入每个目录,然后通过单击并拖动将文件复制到该位置。由于该文件是只读的,因此没有冲突,用户关闭 Excel 窗口并重新启动,他们就有了更新。
我已经着手用一个批处理文件来替换它,随着目录数量的不断增长,该批处理文件会自动执行此操作,并且偶尔会出现错误,例如忘记将文件设置为只读。
我像这样使用 xcopy:
xcopy "%workingdir%%filename%" "%uncpath%%targetdirectory%" /y /k
Run Code Online (Sandbox Code Playgroud)
我在写入文件时被拒绝访问。有没有一种方法可以实现我们通过使用批处理单击和拖动获得的功能?我确信一定有办法做到这一点,但到目前为止我们看到的所有解决方案都涉及暂时删除“只读”然后复制文件的代码。我不认为这是一个可行的解决方案,因为如果有人在那一刻加载文件,它可能会锁定对文件的访问。
编辑:发布此后不久发现它是 xcopy 标志 /r 不知道我是如何错过它的,我想只是那些日子之一。谢谢。
有没有一种优雅的方法可以从文件夹路径获取(曾祖父母文件夹)三层?
我只想C:\folderA\folderB
从完整路径中获得,但这两种解决方案对我来说都显得丑陋。
$path = "C:\folderA\folderB\folderC\FolderD\folderE"
# option 1
(Get-Item $path).parent.parent.parent.FullName
# option 2
$path | Split-Path -Parent | Split-Path -Parent | Split-Path -Parent
Run Code Online (Sandbox Code Playgroud) 我试图使用输出变量Write-Output
,但它在PowerShell类方法中不起作用.Write-Host
工作中.请参阅下面的示例代码.
class sample {
[string] sampleMethod() {
$output = "Output message"
try {
Write-Output $output
throw "error"
}
catch {
Write-Output $output
$_
}
return "err"
}
}
$obj = [sample]::new()
$obj.sampleMethod()
Run Code Online (Sandbox Code Playgroud)
是否有任何特定原因导致Write-Output
在类方法中不起作用?
c# ×5
powershell ×5
.net ×2
.net-core ×1
asp.net ×1
asp.net-core ×1
batch-file ×1
class ×1
cmd ×1
hotkeys ×1
keylogger ×1
keystroke ×1
parameters ×1
pfx ×1
private-key ×1
sql ×1
windows ×1
xcopy ×1