Что было бы хорошим способом добавить «дружественные» имена столбцов в модель LINQ to SQL? - PullRequest
2 голосов
/ 11 января 2009

У меня есть настройка модели LINQ to SQL - однако в моем приложении есть определенные места, где я хочу «дружественные» имена столбцов, например:

«NameFirst» будет «Имя» «AgencyName» будет «Агентством»

Просто ищу предложения о том, где было бы лучшее место / метод для создания этих отображений - без изменения модели. Эти сопоставления не обязательно будут использоваться в GridView или каком-либо конкретном элементе управления - они должны быть доступны в любом качестве.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 11 января 2009

Что ж, для большинства табличных применений вам понадобится [DisplayName(...)], но это не так просто сделать, не связавшись с частичными классами. Однако, если вы просто хотите, чтобы он был доступен, вы можете объявить свой собственный атрибут для класса и добавить его туда:

[MyDisplayName("NameFirst", "First Name")]
[MyDisplayName("AgencyName", "Agency")]
partial class Foo {}

Тогда используйте отражение, чтобы получить это; что делать? Если так, то что-то вроде:

static class Program
{
    static void Main()
    {
        Console.WriteLine(MyDisplayNameAttribute.Get(
            typeof(Foo), "NameFirst"));
        Console.WriteLine(MyDisplayNameAttribute.Get(
            typeof(Foo), "Bar"));
    }
}

[AttributeUsage(AttributeTargets.Interface |
    AttributeTargets.Class | AttributeTargets.Struct,
    AllowMultiple = true, Inherited = true)]
sealed class MyDisplayNameAttribute : Attribute
{
    public string MemberName { get; private set; }
    public string DisplayName { get; private set; }
    public MyDisplayNameAttribute(string memberName, string displayName)
    {
        MemberName = memberName;
        DisplayName = displayName;
    }
    public static string Get(Type type, string memberName)
    {
        var attrib = type.GetCustomAttributes(
                typeof(MyDisplayNameAttribute), true)
            .Cast<MyDisplayNameAttribute>()
            .Where(x => x.MemberName.Equals(memberName,
                StringComparison.InvariantCultureIgnoreCase))
            .FirstOrDefault();
        return attrib == null ? memberName : attrib.DisplayName;
    }
}

[MyDisplayName("NameFirst", "First Name")]
[MyDisplayName("AgencyName", "Agency")]
partial class Foo { } // your half of the entity

partial class Foo { // LINQ-generated
    public string NameFirst {get;set;}
    public string AgencyName {get;set;}
    public string Bar { get; set; }
}
0 голосов
/ 11 января 2009

Другой вариант - сохранить строковый словарь с именами свойств (Type.Property) в качестве ключа и понятным именем в качестве значения.

Тогда вы можете настроить его в статическом классе и иметь его в наличии, когда вам это нужно. Это будет легко поддерживать, поскольку все определения будут доступны в одном месте.

Вы могли бы даже иметь его как статическое свойство базового класса ваших сущностей, чтобы оно было доступно для всех типов сущностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...