22

Entity Framework(v5.0)データベースの最初のアプローチを使用している場合、検証にデータ注釈を使用する最良の方法は何ですか?

これは、EntityFrameworkによって作成された私の部分的なクラスです。

//------------------------------------------------------------------------------
// <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

4 に答える 4

23

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.
}
于 2013-03-25T18:14:26.810 に答える
3

名前空間に問題があります。1つはACore名前空間の下に、もう1つはACore.Models名前空間の下に2つの異なるPayrollMarkup_Stateクラスを定義しました。メタデータタイプ定義を含むファイルで、名前空間を(ACore.Modelsから)ACoreに変更します。

于 2013-03-25T18:31:55.463 に答える
1

部分的なメタデータクラスを使用できます

http://www.asp.net/mvc/overview/getting-started/database-first-development/enhancing-data-validation

于 2015-01-20T12:24:11.503 に答える
0

マップとメタの2つの追加クラスを使用しました。これが、私のマップです。

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

    }
}
于 2017-05-26T20:12:29.907 に答える