【问题标题】:Entity Framework Core 2 Save strings as uppercaseEntity Framework Core 2 将字符串保存为大写
【发布时间】:2017-08-18 15:53:31
【问题描述】:

我想将所有字符串以大写形式保存到我的数据库中。我认为最好的方法是在我的DbContext 上覆盖SaveChanges()。我知道我需要打电话给ToUpper(),但我不确定该打电话给什么。

public override int SaveChanges()
{
    foreach (var entry in ChangeTracker.Entries().Where(e => e.State == EntityState.Added || e.State == EntityState.Modified))
    {
       //do something
    }
    return base.SaveChanges();
}

【问题讨论】:

  • 我会在您的数据库中对选定列使用 CHECK 约束,并在相应的属性设置器中使用 ArgumentExceptions。
  • 我同意@DavidBrowne-Microsoft - 在重写的 SaveChanges() 函数中操作数据是一个糟糕的选择。我会选择在每个属性的 setter 函数上转换它们,甚至使用触发器在数据库级别转换它们,然后再在上下文中处理它们。

标签: entity-framework entity-framework-core .net-core-2.0


【解决方案1】:

我不确定用这个约束来污染你的数据库层是否明智。这会限制数据库的可重用性。

通常,数据库(表)结构的定义与数据库中数据的处理是分开的,这是通过单独的Database Abstraction Layer 完成的。

这种分离使您可以将数据库结构重用于具有其他约束的数据库(例如,允许小写字符串的数据库,或用于单元测试的特殊数据库)。

这种关注点分离通常使用存储库模式来实现。这种分离使得可以改变数据库的功能而不必改变数据库的结构。

您还可以使用使用小写字符串的现有数据库,因为您的存储库层可以在返回查询字符串之前将所有内容转换为大写。

因此,通过将数据库与数据功能分离,您可以更轻松地将数据库重用于其他目的,并在无需更改数据库中的数据的情况下更改需求:提高可重用性和改进维护。

【讨论】:

  • 这是一个非常奇怪的“存储库模式”链接!
  • 糟糕。修复和改进了链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-01
  • 2018-05-08
  • 1970-01-01
  • 2020-01-07
  • 2020-03-07
  • 1970-01-01
相关资源
最近更新 更多