2016-11-04 139 views
-2

我有一個數據庫優先的ASP.NET MVC應用程序和從數據庫生成的實體模型,但我需要添加一些東西到未生成的模型。像這樣以正確顯示日期:實體框架模型和MVC模型不能映射

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 

所以我想創造另一種模式,在Models文件夾,並複製該EDMX了,並添加什麼,我需要完全一樣的東西。但是這會產生一個問題,我無法將對象從EntityModels.Movie轉換爲Models.Movie,我該如何實現這一目標?

我試過automapper,但並沒有真正的工作,我讀過的文檔是針對舊版本(pre v5),它有一些過時的功能。 這裏是我的實體模型代碼:

namespace Movies.EntityModels 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel.DataAnnotations; 

    public partial class Movie 
    { 
     public int ID { get; set; } 
     public string Title { get; set; } 
     public Nullable<System.DateTime> ReleaseDate { get; set; } 
     public Nullable<int> ID_Genre { get; set; } 
     public decimal Price { get; set; } 
     public string Rating { get; set; } 
     public int Quantity { get; set; } 

     public virtual Genre Genre { get; set; } 
    } 
} 

什麼是達到我的目標,最好的辦法?

+1

*我試過automapper,但並沒有真正的工作* - 什麼,所以你說的automapper不起作用?你可以在這裏報告錯誤:https://github.com/AutoMapper/AutoMapper/issues –

+0

爲什麼不在你的部分類中添加你想要的字段/屬性?在使用實體框架時這是相當普遍的做法。原因是生成的模型已經有一個部分修飾符。 –

回答

1

你可以手動編寫一個映射器作爲擴展方法,它非常簡單。

public class Model() 
{ 
    public string Test1 {get;set;} 
    public string Test2 {get;set;} 
    public string Test3 {get;set;} 
} 

public class Entity(){ 
    public string Test1 {get;set;} 
    public string Test2 {get;set;} 
    public string Test3 {get;set;} 
} 

現在你創建一個擴展方法,例如「ToModel」,對實體對象轉換爲你的模型:

public static class MyExtensions{ 
    public static Model ToModel(this Entity entity){ 
     var model = new Model() 
     model.Test1 = entity.Test1; 
     model.Test2 = entity.Test2; 
     model.Test3 = entity.Test3; 

     return model; 
    } 
} 

和他們,只要你有你的實體對象,只需調用擴展方法:

public JsonResult test() 
{ 
    var entity = new Entity() 

    //{ Fill your entity properties from your dataset or something } 

    var model = entity.ToModel(); 
} 
+0

我應該在哪裏放置擴展方法?任何課程或模型內? – Ribeiro

+0

任何一類。啊,我忘了添加,擴展方法應該是一個靜態的 – Stormhashe

1

您是否嘗試過使用[NotMapped]屬性在相同的Movie模型(Movies.EntityModels中)中創建一個新的公共屬性,可以說ReleaseDateFormatted。

+0

請重新寫這個答案。目前感覺更像是評論。您可以將OP需要添加的更改作爲代碼片段添加進來,並將「您嘗試過?」替換爲「執行此操作」。提交 –