2014-03-26 19 views
0

我需要在從模型中加載數據之後,自動在不屬於數據庫的屬性中插入一個信息。在查找功能後在MVC 5 EF5中修改模型

例:

namespace project.Models 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel.DataAnnotations; 
    using System.ComponentModel.DataAnnotations.Schema; 
    using System.Data.Entity; 

    public partial class MessageSource 
    { 
     public MessageSource() 
     { 
      this.messages = new HashSet<Message>(); 
     } 

     public int id { get; set; } 
     public string category { get; set; } 
     public string message { get; set; } 

     public string message_translation { get; set; } 

     public virtual ICollection<Message> messages { get; set; } 
    } 
} 

ID,類別和消息是數據庫表的屬性,message_translation沒有,加載此模式後,我總是需要將自動把信息message_translation。怎麼樣?

+0

你從哪裏得到數據來設置'message_translation'? –

回答

0
messageSource m = new messageSource(); 
var m2 = // query your db using sql or entity framework 

然後

m.id= m2.id; 
m.category= m.category; 
m.message= m2.message 
m.message_translation= "vvvvvvv whatever"//do add thing here 
m.messages = m2.messages; 

編輯:

另一種解決方案

Public class translation { 
public int Id { get; set;} 
public string language { get; set;} 
public string text { get; set;} 
} 

然後你在爲messageSource模型添加以下除去message_translation

01後
Public Icollection<translation> transMsg { get; set;} 

現在假設你有一個味精被翻譯成13種語言;那麼ICollection<transMsg>將有13個項目,我們只需要在中國翻譯

待辦事項如下: 首先讓你的信息

var myMsg = dbContext.messageSources.Where(m=>m.id== 6).FirstOrDefault(); 

這將不會加載任何翻譯BEC。我們沒有使用Include(),即延遲加載

然而,當我們想要的翻譯,我們通過另一個Linq查詢拉如下:

var myMsgTranslation = myMsg.transMsgs.Where(t=>t.lang == "chinese").FirstOrDefault(); 

或者您加載所有翻譯如下

var myMsg = dbContext.messageSources.Where(m=>m.id== 6).Include(m=>m.msgTrans).FirstOrDefault(); 

而在瀏覽頁面u拉默認語言如下

@html.textBoxFor(model=>model.msgTrans.Where(t=>t.lang == "chinese")) 

Desclaimer:未測試

希望能夠幫助

+0

我需要得到這個信息insite模型... =/ – AndrehOdon

+0

模型只是一個模型,你需要了解模型的概念!你是否願意爲數據庫中的每條記錄進行相同的翻譯? – stackunderflow

+0

我理解這個概念,但我想知道是否有辦法自動執行此操作,不需要在整個系統中執行相同的代碼來獲得翻譯。像這樣的https://github.com/yiisoft/yii/issues/2011和我需要把每個記錄翻譯爲DB – AndrehOdon

1

我這樣做:

public partial class MessageSource 
{ 
    public MessageSource() 
    { 
     this.messages = new HashSet<Message>(); 
    } 

    public int id { get; set; } 
    public string category { get; set; } 
    public string message { get; set; } 

    public string message_translation { get; set; } 

    public virtual ICollection<Message> messages { get; set; } 

    public string getTranslate() 
    { 
     if(message_translation == null) 
     { 
      Message msg = messages.FirstOrDefault(m => m.language.Equals(Translate.Instance.getLanguage())); 

      if(msg != null) 
      { 
       message_translation = msg.translation; 
      } 
      else 
      { 
       message_translation = String.Empty; 
      } 
     } 

     return message_translation; 
    } 
} 

做工不錯

+0

很好的解決方案..既然它適合你,爲什麼不把你的答案標記爲已接受的答案,所以其他人可以從中受益 – stackunderflow

+0

我會提出另一個答案,靈感來自你的答案見下文 – stackunderflow

0
public partial class MessageSource 
{ 
private string _defaultLanguage; 
public MessageSource(string defaultLang) 
{ 
    this.messages = new HashSet<Message>(); 
    this._defaultLanguage = defaultLanguage ; 
} 

public int id { get; set; } 
public string category { get; set; } 
public string message { get; set; } 

public string message_translation { get; 
set{ value = getTranslation(_defaultLnag); } 

public virtual ICollection<Message> messages { get; set; } 

public string getTranslate(string lang) 
{ 

     var Translation = dbcontext.messages.Where(m=> m.Id == this.Id).FirstOrDefault().Translation.Where(t=>t.lang == lang).FirstOrDefault(); 


    return Translation; 
} 
} 

此解決方案假定您節省鏈接一個單獨的表翻譯到消息表