0

MetadataTypeに関するいくつかの問題/質問があります。LinqToSQL を使用して MS SQL Server からデータ アクセスするための DLL ヘルパー プロジェクトがあります。生成されたクラス ClientInfoView のメタデータも追加する必要があります。私は次の方法でそれを行いました:

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;

namespace DataAPI.LINQToSQL
{
    [MetadataType(typeof(ClientInfoViewMetaData))]
    public partial class ClientInfoView
    {
        internal sealed class ClientInfoViewMetaData
        {
            [Category("Main Data"), DisplayName("Client ID")]
            public int ID { get; set; }

            [Category("Main Data"), DisplayName("Login")]
            public string Login { get; set; }

            ...
        }
    }
}

しかし、実行時に属性を確認したところ、ClientInfoView に属性がないことがわかりました。

間違いを見つけるのを手伝ってもらえますか?

4

3 に答える 3

0

または、elia07 の回答に基づいて、この拡張メソッドを使用できます。

<System.Runtime.CompilerServices.Extension>
Public Function HasAttribute(Of TABLEENTITY, ATTRTYPE)(md As ModelMetadata) As Boolean
    Dim properyName As String = md.ContainerType.GetProperty(md.PropertyName).ToString()

    Dim att As MetadataTypeAttribute = DirectCast(Attribute.GetCustomAttribute(GetType(TABLEENTITY), GetType(MetadataTypeAttribute)), MetadataTypeAttribute)
    If att IsNot Nothing Then
        For Each prop In Type.[GetType](att.MetadataClassType.UnderlyingSystemType.FullName).GetProperties()
            If properyName.ToLower() = prop.Name.ToLower() AndAlso Attribute.IsDefined(prop, GetType(ATTRTYPE)) Then
                Return True
            End If
        Next
    End If

    Return False
End Function

サンプル:

 Dim md As ModelMetadata = ...
 Dim isReadOnly As Boolean = md.HasAttribute(Of Cikkek, ReadOnlyFW)
于 2016-01-09T11:54:06.260 に答える