小编gro*_*kky的帖子

向现有SQLite表添加约束

我正在使用SQLite,它不支持向现有表添加约束.

所以我不能做这样的事情(仅作为一个例子):

ALTER TABLE [Customer]
ADD CONSTRAINT specify_either_phone_or_email
CHECK (([Phone] IS NOT NULL) OR ([Email] IS NOT NULL));
Run Code Online (Sandbox Code Playgroud)

这种情况有没有解决方法?

我知道:

  • 我可以为新表添加约束,但它不是新的(它由我的ORM,EF Core生成)
  • 我可以做一个"表重建"(重命名表,创建新表,复制旧数据,删除临时表)但这看起来真的很复杂

思路

  • 我可以以某种方式将表的副本复制到新表中,并进行一些架构更改吗?
  • 或以某种方式"获取"模式,并在SQL脚本中编辑它,然后添加具有该模式的表?

sqlite alter-table check-constraints database-schema entity-framework-core

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

如何安全地从EF的非异步SaveChanges调用异步方法?

我使用ASP.NET的核心,和EF核心,拥有SaveChangesSaveChangesAsync.

在保存到数据库之前,在我的DbContext执行一些审计/日志记录中:

public async Task LogAndAuditAsync() {
    // do async stuff
}

public override int SaveChanges {
    /*await*/ LogAndAuditAsync();      // what do I do here???
    return base.SaveChanges();
}

public override async Task<int> SaveChangesAsync {
    await LogAndAuditAsync();
    return await base.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

问题是同步SaveChanges().

我总是"一直异步",但这里不可能.我可以重新设计LogAndAudit(),LogAndAuditAsync()但这不是DRY,我需要更改十几个不属于我的主要代码.

关于这个主题还有很多其他问题,所有问题都是一般的,复杂的,充满争议.在这个具体案例中,我需要知道最安全的方法.

那么,在SaveChanges()没有死锁的情况下,如何安全地同步调用异步方法呢?

c# asynchronous entity-framework async-await entity-framework-core

11
推荐指数
2
解决办法
993
查看次数

在EF Core中生成复合唯一约束/索引

我需要一个复合唯一约束来实现我的实体的Name属性,它是唯一的Category(对于它有一个FK).

所以像这样:

entityTypeBuilder
  .HasIndex(i => new { i.Name, i.Category.Id })
  .IsUnique();
Run Code Online (Sandbox Code Playgroud)

但是由于Category.Id导航属性,我在生成迁移时失败了.

我知道我可以将值硬编码为字符串,但我不想丢失静态类型.

我有什么选择?

entity-framework ef-migrations entity-framework-core ef-fluent-api

10
推荐指数
2
解决办法
4773
查看次数

如何为ASP.NET Core注册和使用MediatR管道处理程序?

我正在使用ASP.NET Core,最新的MediatR和Core的DI的 MediatR 扩展.

我正在尝试使用官方博客文章建立一个验证管道.这个例子在这里.

我不明白如何注册/使用该管道类.另一篇博客文章展示了如何做到这一点,但我认为它适用于AutoFac.

我如何为内置容器执行此操作?

cqrs mediatr asp.net-core

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

如何在 ASP.NET Core 中手动注册 Mediatr 处理程序?

我正在使用 ASP.NET Core,带有内置容器。

自动注册应该像这样完成:

services.AddMvc();
services.AddMediatR(typeof(Startup));
Run Code Online (Sandbox Code Playgroud)

这会自动 1) 配置 MediatR,2) 注册程序集中找到的所有处理程序。

但我想手动注册我的处理程序。我怎么做?

c# mediatr asp.net-core

8
推荐指数
2
解决办法
8434
查看次数

如何在EF Core中配置固定长度列?

在之前的EF中,我可以这样做:

  entityTypeBuilder
    .Property(b => b.Foo)
    .IsRequired()
    .HasMaxLength(10)
    .IsFixedLength();
Run Code Online (Sandbox Code Playgroud)

这将产生类似的迁移

Foo = c.String(nullable: false, maxLength: 10, fixedLength: true)
Run Code Online (Sandbox Code Playgroud)

但是在EF Core中没有IsFixedLength().

还有其他方法吗?

entity-framework ef-code-first ef-migrations entity-framework-core ef-fluent-api

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

我可以在内部创建ASP.NET核心控制器吗?

ASP.NET(和Core)控制器需要public.

问题是我有一个控制器,它依赖于(在它的构造函数中)某些东西internal.而且依赖性取决于内部的东西,这取决于内部的东西等等.所以我也需要制作控制器internal.

但是控制器工厂不会发现它.

有没有办法使internal控制器可被发现?

c# asp.net asp.net-core

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

具有异步写入的自定义NLog目标

NLog允许我编写自定义目标.我想使用Entity Framework Core登录我的数据库.

NLog.Targets.Target那里是这样的:

protected virtual void Write(LogEventInfo logEvent);
Run Code Online (Sandbox Code Playgroud)

但是我的代码是异步的,所以我必须这样做:

protected override async Task WriteAsync(LogEventInfo logEvent)
{
    await WriteToEfContext(logEvent);
    // and so on...
}
Run Code Online (Sandbox Code Playgroud)

但是没有Task WriteAsyncwrite方法的版本.

如何使用异步支持编写自定义目标?

c# nlog .net-core

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

注册具有无效/任务响应的MediatR管道

我的命令:

public class Command : IRequest { ... }
Run Code Online (Sandbox Code Playgroud)

我的处理程序:

public class CommandHandler : IAsyncRequestHandler<Command> { ... }
Run Code Online (Sandbox Code Playgroud)

我的管道注册(不使用开放的泛型):

services.AddTransient<IPipelineBehavior<Command>, MyBehavior<Command>>();
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用:Using the generic type 'IPipelineBehavior<TRequest, TResponse>' requires 2 type arguments.并且存在相同的错误MyBehavior

文档提到了Unitstruct。如何使用?

c# cqrs mediatr asp.net-core

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

禁用 EF Core 包含所有属性的约定

EF Core(就像之前的 EF 一样)会自动向模型添加带有 get/set 的属性。

我使用 Fluent API,我需要记住忽略它们,这会变得乏味 - 我总是会遇到运行时错误,因为我总是忘记。

我希望 EF 仅包含我已配置的那些属性。

如何禁用此约定?

c# entity-framework entity-framework-core

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