小编Rob*_* J.的帖子

EF Core > 删除实体(软删除)> 实体状态保持不变

在我的通用基础存储库中,我有以下简单的方法用于从数据库中删除实体:

    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)

c# delete-row ef-core-3.1

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

WPF-MVVM文本框限制为特定字符

我试图使文本框仅接受特定字符。

我的文本框绑定到以下内容:

    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)

我不明白的是,即使我的“模式”设置为“双向”,该用户仍然可以写他想要的任何内容。

我究竟做错了什么?

c# wpf mvvm

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

c#LINQ Distinct()在多级列表上

我有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列表(我猜有独特的值).我怎么解决这个问题?谢谢

c# linq

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

c#使用Process.Start发送电子邮件

我想使用默认电子邮件应用程序发送没有附件的简单电子邮件.

我知道它可以使用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消息.我想直接发送这个没有用户手动点击"发送"按钮.我错过了什么?

谢谢

c# email outlook

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

多嵌套的FirstOrDefault

我有以下型号:

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 …

c# linq

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

与VBA相比,VSTO性能下降

我是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# excel performance vba vsto

0
推荐指数
2
解决办法
3526
查看次数

标签 统计

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