【问题标题】:How can I manage Languages?如何管理语言?
【发布时间】:2013-10-03 07:31:52
【问题描述】:

我在配置自己的数据库和使用管理语言的实体框架制作应用程序的相关代码隐藏时遇到问题。

通常,在我的旧项目中,我有一个表格,比如说 Pages,其中包含标识单个页面的唯一行,带有标准信息(根本不需要翻译):

ID
Author
Date
Location

附上我有一个支持表 Pages_L (1-N),其中包含语言数据,因此为每个页面行翻译了具体信息:

ID
ID_PAGE
LANGUAGE
Title
Description
Notes

嗯,数据库的标准配置!没有数据冗余。

现在问题出现在实体框架中,因为对于我要提取的特定页面,我每次都需要进行选择:

1 - first the page (a `.Where`);
2 - than select the language (another `.Where`)
3 - finally, select the field I want (let say, `Title`)

我觉得这是一个烦人的过程,因为当我进行查询时,我只需要提取固定语言的数据。我的意思是:当我的申请正在处理时,语言总是一种。我不提取一些英文,一些意大利文,一些法文等等。

所以我想要实现的是整个上下文的一种“起始语言点”。 在后期,我只需要这样做:

Pages.Where(p=>p.ID==myID).FirstOrDefault().Title

每次都没有通过 Pages_L 表。

问题是:我可以用实体框架以某种方式做到这一点吗?我可以更改项目中的所有内容,因此每个建议都会很好! (从 DB,到实体框架,再到其他供应策略)。

【问题讨论】:

    标签: .net sql-server entity-framework


    【解决方案1】:

    希望我没有误会你。

    你为什么不写一个方法,将你搜索的整个记录​​作为一个对象返回,然后从返回的对象中,到达你想要的字段?该方法将返回一个 Page 类型的对象,但使用 Include 东西,您当然可以根据您的限制返回一个 Pages_L 实体与其相关的 Page 对象。然后你可以在你想要的部分到达它的任何领域。比如,让我们将您的方法称为 myQuery。

        Page page = myQuery(language, pageID);
        string ttl = page.Pages_L.Title;
    

    这应该可以。如果没有,您可以使用 lambda 表达式来达到 Title 或简单地:

        Page page = myQuery(language, pageID);
        Pages_L pages_l = page.Pages_L;
        tring ttl = pages_L.Title;
    

    应该可以。

    只需编写一个方法,将 Page 和 Pages_L 作为 Page 对象一起返回,并采用正确的 LANGUAGE 和 ID 参数。

        public static Page (string lang, int pageID){
        YourDBName dbContext = new YourDBName;
        List<Page> pageList = ctx.Page.Include("Pages_L").Where(p=>p.ID == pageID);
        Pages_L pages_l = new Pages_L();
        foreach (Page page in pageList){
        pages_l = page.Pages_L;
        if(pages_l.Language == lang){
        return page;
        }}}
    

    当然应该有更好的方法来进行这个查询,用 foreach 消除记录有点蹩脚,但我现在没有有用的数据库来测试这样的查询。此外,如果您确定至少有一条记录,则必须调用此函数。它像“First”,但不像“FirstOrDefault”。但是,如果我没有误解您的问题,这应该可行。如果这有帮助,您可以使用多个“Where”和一些 lambda 表达式来提高查询质量;并且不使用列表。

    【讨论】:

      【解决方案2】:

      为了在您的页面中使用不同的语言,您可以使用页面资源, 它不需要为语言值连接数据库。 你可以检查;

      http://msdn.microsoft.com/en-us/library/ms227427.aspx http://msdn.microsoft.com/en-us/magazine/cc163566.aspx

      【讨论】:

      • 但是我要显示的数据是存储在数据库中的,所以我必须以某种方式提取它...
      猜你喜欢
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 2023-01-05
      • 1970-01-01
      相关资源
      最近更新 更多