0

ASP.NETMVCプロジェクトに単一の記事の代替言語バージョンを追加する必要があります。現在、ArticleId、Abstract、Headline、BodyText、およびImageUrlの各フィールドを持つNewsArticleというdbテーブルがあります。ニュース記事を作成するときに、記事の代替言語バージョンを入力するためのフィールドを作成者に提供するオプションが基本的にあります。この代替コンテンツは、サイトの言語切り替え制御を介して、その特定の言語のニュース記事ビューに表示できます。

この要件を含めるために既存のモデルを再設計する限り、誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

0

多言語オブジェクトごとに2つのテーブルを作成することで、これを回避できました。つまり、NewsArticleを2つのテーブルNewsArticleText(ローカライズされたコンテンツ、言語ごとに1つのレコード、および言語のISOコードを含む)とNewsArticle(言語に依存しないデータを含む; ArticleId)に分割します。 、ImageUrlなど)3番目のテーブルLanguagesは、使用されるすべての言語とそのISOコードをプライマリキーとして作成されます。

例:

Table "NewsArticle"
-------------------
ArticleId                 : uniqueidentifier
<any other language-neutral fields>


Table "NewsArticleText"
-----------------------
ArticleId          : uniqueidentifier (foreign key referencing the NewsArticle)
LanguageCode       : varchar(6)  (e.g. "en-GB", "de-CH", foreign key referencing the Languages table)
Headline           : varchar(100)
BocyText           : varchar(max)
<any other localized data>

Table "Languages"
-----------------
LanguageId         : uniqueidentifier
LangaugeCode       : varchar(6)
Name               : varchar(20)

dbのクエリは、言語パラメータに基づいて行われます。たとえば、次のコードはすべての英語の記事を返します。

// get all English language articles 
var news = from na in datacontext.NewsArticles
    where na.Deleted == false
    join nt in datacontext.NewsArticlesText 
        on na.ArticleId equals nt.ArticleId
    where nt.LanguageCode == "en-GB"
    select new NewsArticleItem
    {
       ArticleId = na.ArticleId,
       ImageUrl = na.ImageUrl,
       Headline = nt.Headline,
       Abstract = nt.Abstract,
       BodyText = nt.BodyText,
       LanguageCode = nt.LanguageCode,
       DateCreated = na.DateCreated
    };
return news.ToList();
于 2012-10-23T11:36:19.010 に答える