Как добавить свойство, не относящееся к базе данных, к сущности Entity Framework? - PullRequest
3 голосов
/ 21 июня 2011

Мой вопрос: Я хотел бы добавить простое типизированное свойство (например, string, int, double) к моей сущности Entity Framework (в моем проекте ASP.NET), которое не связано ни с одним полем втаблица базы данных, которая соответствует сущности.Я хотел бы иметь возможность установить значение этого свойства в моем проекте ASP.NET и сделать так, чтобы содержимое этого свойства автоматически отправлялось клиенту Silverlight для получения сущностей через службы RIA.

Как сделатьЯ делаю это?

Примечание: Если это облегчит задачу, для моего конкретного случая мне не нужно сохранять объекты обратно в базу данных.Кроме того, было бы замечательно, если бы это работало для представлений и таблиц.

Моя настройка: Я использую Silverlight 4, Entity Framework 4 и RIA Services.Он настроен обычным образом: клиентское приложение Silverlight и серверное приложение ASP.NET;Я генерирую свою модель EF из базы данных.Службы RIA генерируют сущности и методы доступа к базе данных на клиенте Silverlight.

Мой пример:

База данных: таблица клиентов

  • CustomerID
  • CustomerName

EF-сгенерированный объект (на стороне сервера ASP.NET): класс клиента

  • Открытое свойство CustomerID как целое число
  • Открытое свойство CustomerName as String

Я хотел бы добавить к сущности Customer свойство, не связанное с базой данных:

  • Открытое свойство UnicornColor в виде строки

В моей доменной службе (на стороне сервера ASP.NET) я сам заполняю новое свойство:

Public Function GetCustomers() As IQueryable(Of Customer)
    Dim customers as IQueryable(of Customer) = Me.ObjectContext.Customers
    For each c as Customer in customers
       c.UnicornColor = "Green"
    Next
    return customers
End Function

На стороне клиента мне бы хотелось, чтобы это новоесвойство и его значения, чтобы быть там, когда я запускаю свой запрос:

Public Sub LoadCustomers()
    myContext.Load(myContext.GetCustomersQuery, AddressOf CustomersLoaded, Nothing)
End Sub

Public Sub CustomersLoaded(ByVal loadOp as LoadOperation(Of Customer))
    Dim customers as IEnumerable(Of Customer) = loadOp.Entities
    For Each c as Customer in customers
        dim color as string = c.UnicornColor
    Next
End Sub

1 Ответ

3 голосов
/ 22 июня 2011

Используйте T4 для генерации частичных классов для сущностей (например, POCO T4 в галерее расширений Visual Studio), затем добавьте файл, например. MyEntity.Part2.cs с тем же частичным классом, что и сгенерированный файл, но с новыми свойствами.

Для получения дополнительной информации Google частичные классы C #.

...