C# 使用代码优先实体框架6.1将属性添加到属性以覆盖entityclass中的get/set

C# 使用代码优先实体框架6.1将属性添加到属性以覆盖entityclass中的get/set,c#,asp.net-mvc,entity-framework,localization,C#,Asp.net Mvc,Entity Framework,Localization,因为我想以JSON的方式为某些实体的某些字符串列添加本地化,所以我希望添加一个属性,可以添加到可以处理此逻辑的属性中 因此,我想将数据库中的字符串保存为: [{'en':'Hello', 'nl':'Hallo', 'fr':'Bonjour'}] 然后,在获取这个属性时,我想添加一些逻辑,以便根据当前区域性返回正确的语言。 我可以写这个逻辑,但我想知道是否有可能写一些像Actionfilter(属性)这样的东西,这是可能的吗?怎么可能?如您所见,我希望全局覆盖使用此属性修饰的属性的gette

因为我想以JSON的方式为某些实体的某些字符串列添加本地化,所以我希望添加一个属性,可以添加到可以处理此逻辑的属性中

因此,我想将数据库中的字符串保存为:

[{'en':'Hello', 'nl':'Hallo', 'fr':'Bonjour'}]
然后,在获取这个属性时,我想添加一些逻辑,以便根据当前区域性返回正确的语言。 我可以写这个逻辑,但我想知道是否有可能写一些像Actionfilter(属性)这样的东西,这是可能的吗?怎么可能?如您所见,我希望全局覆盖使用此属性修饰的属性的getter和setter。属性位于EF的实体类中。
提前感谢。

本地化以及安全、租赁等方面都是交叉问题

其他一些ORM对过滤器有现成的支持,允许实体在上下文级别对其应用全局过滤器

这使得上下文中的所有查询都可以通过横切关注点的某些方面进行过滤。在您的示例中,显示当前位置

通过EntityFramework对实体框架的过滤器提供了固定支持。此处的过滤器OSS项目:

这将像这样工作:

  • 在http请求管道中的某个位置,创建上下文以服务该请求,并在上下文上启用本地化过滤器。将筛选器上的本地化属性设置为当前区域性标记
  • 对请求中的所有数据库操作重新使用此上下文。这样,针对上下文执行的所有查询都将应用本地化过滤器
  • 需要编写本地化筛选器,以便将where子句附加到字符串查找实体,以按当前区域性筛选实体
  • 一些非常粗糙的示例代码:

    在您的上下文中

    protected override void OnModelCreating(...)
    {
        modelBuilder.Entity<Strings>().
            Filter("localisation", 
            // setup up your localisation filter
    

    请原谅我的示例代码的性质-我没有使用过滤器,因为我在现有的项目上设置了它们,并且我无法立即记住语法。GitHub项目站点有一个很好的示例。

    为什么要保存json而不是某些列?因为我不希望每次添加语言时都更改模型谢谢你的回答。我将尝试此项目,稍后再与你联系。。我觉得很奇怪,很难找到好的例子或方法来实现ef本地化“我从那些在ef中实现过滤器的家伙那里找到了最初的博文——如果你有时间的话,值得一读。他们有几篇关于实体框架“缺少的特性”的文章(c.f Nhibernate)这些都是同样好的阅读。感谢链接。可能会派上用场。经过大量思考,我决定使用另一种db设计进行本地化,因为将来使用多种语言时,列的大小可能会变得非常大。不过我会标记你的答案,因为我可以找到问题中提出的解决方案。。
    // Create context
    var myContext = ..
    // Enable the localisation filter using the current cutler
    myContext.EnableFilter("localisation").
        SetParameter("culture", "en");