在我的通用基础存储库中,我有以下简单的方法用于从数据库中删除实体:
public async Task<bool> DeleteAsync(TKey id)
{
var item = await Context.Set<TDb>().FindAsync(id).ConfigureAwait(false);
if (item == null)
return null;
var result = Context.Set<TDb>().Remove(item);
await Context.SaveChangesAsync().ConfigureAwait(false);
return result.State == EntityState.Modified || result.State == EntityState.Deleted;
}
Run Code Online (Sandbox Code Playgroud)
然后在我的数据库上下文中,我按照以下方式在异步保存更改中设置影子属性(就像微软建议的那样)(为了更清晰而简化了代码):
public class EfCoreDbContext : DbContext, IUnitOfWork
{
public EfCoreDbContext(
DbContextOptions options
IConfiguration configuration) : base(options)
{
}
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = default)
{
ChangeTracker.SetShadowISoftDeletableProperties();
ChangeTracker.SetShadowIUserOwnableProperties(UserResolver);
ChangeTracker.SetShadowIAuditableProperties(UserResolver);
return await base.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
}
}
Run Code Online (Sandbox Code Playgroud)
从SaveChangesAsync方法中可以看出,我已经将影子属性用于其他跟踪项目,例如审核或用户所有权,这些都可以正常工作。
最后,这是负责设置软删除的 Change Tracker 代码
public static void SetShadowISoftDeletableProperties(this ChangeTracker …Run Code Online (Sandbox Code Playgroud) 我试图使文本框仅接受特定字符。
我的文本框绑定到以下内容:
private string _CompanyID;
public string CompanyID
{
get { return _CompanyID; }
set
{
_CompanyID = UniversalHelpers.sReturnCorrectColumnName(value);
OnPropertyChanged("CompanyID");
}
}
Run Code Online (Sandbox Code Playgroud)
这是被调用的函数:
public static string sReturnCorrectColumnName(string sInput)
{
if(!string.IsNullOrWhiteSpace(sInput))
return Regex.Replace(sInput, @"[^a-zA-Z]", string.Empty).ToUpper();
else
return sInput;
}
Run Code Online (Sandbox Code Playgroud)
(我只允许使用AZ&AZ,没有其他内容)。
最后,我的TextBox看起来像这样:
<TextBox Text="{Binding ExcelBindings.CompanyID, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
Run Code Online (Sandbox Code Playgroud)
我不明白的是,即使我的“模式”设置为“双向”,该用户仍然可以写他想要的任何内容。
我究竟做错了什么?
我有List<List<int>>以下值:
[1] = 1,2
[2] = 4,5,6
[3] = 1,3
Run Code Online (Sandbox Code Playgroud)
我想要做的是检索具有唯一值=> 1,2,3,4,5,6(在原始列表中重复的第一个)的简单List.
如果是1D List,我会用
variable.Select(n=>n).Distinct();
Run Code Online (Sandbox Code Playgroud)
但是当我试图使用时
variable.Select(n=>n.Select(x=>x)).Distinct();
Run Code Online (Sandbox Code Playgroud)
我得到了2D列表(我猜有独特的值).我怎么解决这个问题?谢谢
我想使用默认电子邮件应用程序发送没有附件的简单电子邮件.
我知道它可以使用Process.Start完成,但我无法让它工作.这是我到目前为止:
string mailto = string.Format("mailto:{0}?Subject={1}&Body={2}", "to@user.com", "Subject of message", "This is a body of a message");
System.Diagnostics.Process.Start(mailto);
Run Code Online (Sandbox Code Playgroud)
但它只是打开带有预写文本的Outlook消息.我想直接发送这个没有用户手动点击"发送"按钮.我错过了什么?
谢谢
我有以下型号:
public class Stredisko
{
public string Name { get; set; }
public ObservableCollection<SubStredisko> Pracoviska { get; set; }
public ObservableCollection<SubStredisko> Dohodari { get; set; }
}
public class SubStredisko
{
public string Name { get; set; }
public string Code { get; set; }
public VyplatnePasky VyplatnaPaska { get; set; }
public MzdoveNaklady MzdoveNaklady { get; set; }
public Poistne Poistne { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我现在正在尝试运行一个超级简单的LINQ查询,该查询应返回符合以下条件的第一个元素:
var sStredisko = Strediska.FirstOrDefault(
n => n.Pracoviska.FirstOrDefault(x=>x.Name == "somename"));
Run Code Online (Sandbox Code Playgroud)
我对此运行此条件: ObservableCollection<Stredisko> Strediska …
我是stackoverflow的新手,因此我将直接从我的问题开始.
我有几年通过集成VBA为Excel开发宏的经验,半年前我开始学习新语言C#.我喜欢它,它的可能性,我也找到了通过Visual Studio直接在C#中开发Office插件的选项(需要VSTO).我遇到的问题是,在进行多次测试之后,我尝试比较使用C#创建的插件的速度和使用VBA创建的宏(例如,将字符串"测试字符串"粘贴到A1到A10 000的每个单元格中).问题是集成的VBA比使用Visual Studio(C#)创建的Addin快几倍.我当时决定不打扰这个问题,但是后来我遇到了同样的问题但是这一次而不是cca 10秒(VBA)过程耗时超过2分钟!
在谷歌上做研究之后我发现VSTO在性能方面表现不佳,特别是当你需要你的应用程序与Excel交互时(因此有办法解决问题,比如将数据保存到动态数组中,然后直接填充整个数组到activesheet); 然而,有些情况下,您只需要与excel进行交互(就像我必须动态地取消保护工作簿中的许多工作表...在这里,您只需要说ActiveSheet.Unprotect)
我的问题是,除了缓慢的VSTO之外,还有什么方法,如何创建(可能是其他一些软件)Addins for Excel/Word /其他可轻松部署的Office产品?非常感谢你.
问候,罗伯特
c# ×6
linq ×2
delete-row ×1
ef-core-3.1 ×1
email ×1
excel ×1
mvvm ×1
outlook ×1
performance ×1
vba ×1
vsto ×1
wpf ×1