小编Aro*_*thu的帖子

实体框架varchar外键不区分大小写

几年前,人们提出了以下问题:实体框架nvarchar外键上的案例敏感性.

简而言之,答案是:EF使用CLR来比较延迟加载的关联的键,并始终以区分大小写的方式执行此操作,即使数据库设置为不区分大小写的排序规则.

不幸的是,我目前参与的项目大量使用VARCHAR主键列.数据库排序规则不区分大小写.

修复数据库设计实际上不是一个选项,除了可能在主键列上设置CS排序规则(但这可能会破坏客户端应用程序).

所以我的问题是双重的:

  1. 现在,Entity Framework是否提供某种指令或设置,以指示它进行不区分大小写的比较?
  2. 如果没有,是否可以使用触发器自动更改外键以匹配主键的外壳?或者你能想到其他任何解决方法吗?

BTW:SQL Server 2008 R2和实体框架版本6.

c# sql-server entity-framework entity-framework-6

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

Serilog 可以解构传递给 BeginScope 的复杂对象吗?

我正在使用Serilog.Extensions.Logging并使用这个 outputTemplate 输出到控制台:

"{Timestamp:HH:mm} [{Level:u3}] {Message} {Properties:j} {NewLine}"

我想看到的是,通过BeginScope解构设置的复杂对象被解构为Properties. 相反,似乎使用了类型名称。

var data = new Data { Id = 42, Name = "Hitchhiker" };
using (logger.BeginScope(new Dictionary<string, object> { { "Data", data } }))
{
    logger.LogInformation("Hello world!");
}
Run Code Online (Sandbox Code Playgroud)

结果是:

10:40 [INF] Hello world! {"SourceContext": "ConsoleApp3.Program", "Data": "ConsoleApp3.Data"}

我想要的是:

10:40 [INF] Hello world! {"SourceContext": "ConsoleApp3.Program", "Data": { "Id" = 42, "Name" = "Hitchhiker"} }

我是否缺少配置设置,或者这根本不可能?

编辑

刚刚注意到这可以通过 vanilla Serilog 来完成:

var dataLogger = logger.ForContext("Data", data, true); …

serilog microsoft-extensions-logging

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

在 Simple Injector 中注册期间设置收集项目的生活方式

似乎Container.Collection.Register没有重载需要一个Lifestyle. 所有发现的实现都将注册为默认的Lifestyle. 省略这种重载背后的原因是什么?

添加一个集合的首选方式是什么,其中所有项目都应该有一个Lifestyle不是默认的生活方式?

.net c# dependency-injection ioc-container simple-injector

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