簡體   English   中英

查找功能后在MVC 5 EF5中修改模型

[英]Modify Model in MVC 5 EF5 after find function

從模型加載數據后,我需要自動在不是來自數據庫的此類型的屬性上插入信息。

例:

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,category和message是數據庫表的屬性,message_translation是,在加載此模型后,始終需要自動將信息放入message_translation。 怎么樣?

我這樣做:

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;
    }
}

效果不錯

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;}
}

然后,在刪除message_translation之后,將以下內容添加到messageSource模型中

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();

在您的“查看”頁面中,按如下所示提取默認語言

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

聲明:未經測試

希望對您有所幫助

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;
 }
}

此解決方案假定您將翻譯保存在鏈接到消息表的單獨表中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM