Аннотации данных в Entity Framework 5.0 (сначала база данных)
Как лучше всего использовать аннотации данных для проверки, если я использую базу данных Entity Framework (v5.0) в первую очередь?
Это мой частичный класс, созданный Entity Framework:
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.ComponentModel.DataAnnotations;
namespace ACore
{
using System;
using System.Collections.Generic;
public partial class PayrollMarkup_State
{
[UIHint("StatesEditor")] // <-- I added this line but it will be overwritten
public string State { get; set; }
public Nullable<float> MaintenancePercentage { get; set; }
public Nullable<float> OfficePercentage { get; set; }
}
}
Я пытался это безуспешно....
Сгенерированный файл Entity Framework: "PayrollMarkup_State.cs"
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System.ComponentModel.DataAnnotations;
namespace ACore
{
using System;
using System.Collections.Generic;
public partial class PayrollMarkup_State
{
public string State { get; set; }
public Nullable<float> MaintenancePercentage { get; set; }
public Nullable<float> OfficePercentage { get; set; }
}
}
Затем я создал этот файл в другом каталоге: "PayrollMarkup_state.cs"
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
namespace ACore.Models
{
[MetadataType(typeof(PayrollMarkupMetadata))]
public partial class PayrollMarkup_State
{
}
public class PayrollMarkupMetadata
{
[UIHint("StatesEditor")]
public string State; // Has to have the same type and name as your model
}
}
4 ответа
Хотя это несколько болезненно, вам нужно создать класс для использования в качестве MetadataType
для вашего модельного класса.
[MetadataType(typeof(PayrollMarkupMetadata))
public partial class PayrollMarkup_State
{
...
}
public class PayrollMarkupMetadata
{
[UIHint("StatesEditor")]
public string State; // Has to have the same type and name as your model
// etc.
}
У вас проблема с пространством имен - вы определили два разных класса PayrollMarkup_State, один в пространстве имен ACore, а другой в пространстве имен ACore.Models. Измените пространство имен на ACore (из ACore.Models) в файле, содержащем определение типа метаданных.
Вы можете использовать частичный класс метаданных
http://www.asp.net/mvc/overview/getting-started/database-first-development/enhancing-data-validation
Я использовал два дополнительных класса: Map и Meta, вот моя карта:
namespace Whatever.Models
{
[MetadataType(typeof(ThisMeta))]
public partial class This
{
}
}
Теперь вот мета класс:
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace Whatever.Models
{
public class ThisMeta
{
[DisplayName("")]
public int UID { get; set; }
}
}