在Model裡使用MetadataType,來預防外加的metadata屬性因為更新而被清掉

 

在 ASP.NET MVC 使用 Entity Framework DB First 的時候,

因為所有 POCO (Plain Old CLR Object) 類別將會由參考資料庫的架構而自動建立,

而我們會根據需求又自己額外添加一些Metadata上去,但是,

如果資料庫結構有變動需要對Model Class進行更新時,

一旦更新,勢必之前加的Metadata將會被清光,解決的想法如下。

Person.cs

namespace WebApplication1.Models
{
    public partial class Person
    {
        public string id { set; get; }
        public string name { set; get; }
    }
}

POCO類別要加上partial關鍵字

 

PartialPserson.cs

using System.ComponentModel.DataAnnotations;

namespace WebApplication1.Models
{
    [MetadataType(typeof(PersonPartial))]
    public partial class Person
    {

    }

    public class PersonPartial
    {
        [DisplayFormat(DataFormatString = "{0:MM-dd-yyyy}")]
        public string id { get; set; }
    }
}

然後在PartialPserson.cs的partial class Person加上MetadataTypeAttribute,

之後,不管POCO類別如何更新,只要將外加的metadata屬性都寫在Partial Class(如PartialPserson.cs)裡,

就不用怕外加的Metadata會被清掉了。

 

參考資料:

MetadataTypeAttribute 類別

ASP.NET MVC - Model Metadata

ASP.NET MVC 開發心得分享 (24):擴充部分類別的建構子