Entity Framework 4.1 Code Сначала сопоставление / заполнение одного свойства из двух столбцов БД - PullRequest
1 голос
/ 20 мая 2011

Я знаю, что этот вопрос был задан / получен ответ, но я не могу найти его на всю жизнь.

Я создаю и приложение ASP.NET MVC 3 с существующей базой данных, но хотел сначала написать код, поэтому для начала я использовал ETP Power Tools CTP1.В конечном счете, я реорганизую лучшее решение, но чтобы начать, я использовал MVCScaffolding для генерации контроллеров и представлений.Я борюсь с созданием свойства отображаемого значения (FullName) в моей модели, которое представляет собой комбинацию столбцов FirstName и LastName в БД.

У меня есть простой класс

public class Manager
{
    public Manager(){}

    public int ManagerID { get; set; }

    [DisplayName] // Not in db.. want to populate this from first & last name 
    public  string FullName { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

и файл сопоставления, который выглядит как

     public ManagerMap()
    {
        // Primary Key
        this.HasKey(t => t.ManagerID);

        // Table & Column Mappings
        this.ToTable("Manager");
        this.Property(t => t.ManagerID).HasColumnName("ManagerID");

        this.Property(t => t.FirstName).HasColumnName("FirstName");
        this.Property(t => t.LastName).HasColumnName("LastName");
        this.Property(t => t.Email).HasColumnName("Email");
        this.Property(t => t.FullName).WhatToDo..? //<-- Can I / how does this mapping look

    }
}

Возможно ли создать сопоставление FullName или я собираюсьоб этом совершенно неправильно?

Ответы [ 2 ]

2 голосов
/ 20 мая 2011

Нет, невозможно создать FullName отображение.Но вы можете использовать этот простой обходной путь:

public class Manager
{
    public Manager(){}

    public int ManagerID { get; set; }

    [NotMapped]
    public string FullName 
    { 
       get
       {
           return FirstName + " " + LastName;
       }
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}

Единственным недостатком этого подхода является то, что вы не можете использовать FullName свойство в запросе linq-to-entity (поэтому вы не можете, например, упорядочить или выполнить поиск по FullName - вы все равно должны использовать FirstName и LastName).

Если вы используете функцию генерации кода в новых инструментах Power Tools, вам действительно нужно объявить это свойство в отдельном частичном классе, как предложено @Steve Mallory - donне изменяйте сгенерированный код, если вы когда-нибудь захотите его восстановить.

1 голос
/ 20 мая 2011

Я бы не отображал поле в базе данных.Вместо этого я бы объявил мой POCO частичным.В другом файле я бы имел тот же частичный класс и определил там значение комбинации (только с геттером).У меня есть пример кода, если он вам нужен.

Хранение его в отдельном файле помогает, если вы выполните генерацию кода позже.

...