Entity Framework 4 (с использованием EDMX), как добавить поле в модель, что у БД нет поля на самом деле
Мне нужно добавить поле в модель, в базе данных которого фактически нет поля.
Потому что, во-первых, я попытался добавить поле только в класс Entity.
public partial class Weborder
{
(Auto Generated)
public int orderno {get; set;}
.
.
.
(Add Manually)
public string newField1 {get; set;} //this is new field that DB does not have
public string newField2 {get; set;} //this is new field that DB does not have
}
а затем, когда я обновляю EDXM, EDMX удаляет новые поля, потому что в базе данных нет поля.: (
Итак, я добавляю поле в модель EDMX вручную. (Добавить → Скалярное свойство)
тогда при компиляции возникает ошибка, в сообщении об ошибке говорится:
Error 1 Error 3004: Problem in mapping fragments starting at line 399:No mapping specified for properties ...
An Entity with Key (PK) will not round-trip when:...
Кто-нибудь знает, как добавить новые поля в класс сущностей?
Спасибо!
ИЗМЕНИТЬ ДЛЯ:
Если ваша модель представляет собой представление вашей базы данных, а в базе данных у вас нет поля, почему вы хотите добавить ее вручную?
= >
При извлечении данных возвращаемый тип объекта является классом сущности.
и перед передачей данных из контроллера для просмотра мне нужно добавить больше данных (полей) в результат IQueryable.
ех)
public DbSet<WEBORDERLN> WEBORDERLNs { get; set; }
//repository
public IQueryable<WEBORDERLN> WebOrderLns
{
get { return context.WEBORDERLNs; }
}
и теперь я получаю данные weborderln в контроллере. и перед прохождением просмотра мне нужно
добавить дополнительные данные в результат.
var data = webOrderLnRepository.WebOrderLns.Where(e => e.PICKNO == OrderNo).ToList();
foreach (WEBORDERLN weborderln in data)
{
weborderln.[NEW FIELD] = "EXTRA DATA"; //// FOR THIS, I NEED TO ADD NEW FILED INTO ENTITY CLASS
}
//return data
Надеюсь, это может объяснить вопрос:)
Еще раз спасибо.
Ответы
Ответ 1
Вы должны создать новую частичную часть вашего класса сущности (в новом файле .cs) и добавить новые поля в этот класс. Вы не должны изменять частичную часть, созданную автогенерацией, потому что автоматически генерируемые файлы будут перезаписаны каждый раз при изменении файла EDMX. Вы также не должны включать поле в EDMX, потому что EDMX определяет ваше сопоставление с базой данных = он содержит только поля в базе данных.
Создайте новый файл WebOrderPart.cs в той же сборке и пространстве имен, что и ваши автоматически генерируемые классы, содержащие:
public partial class Weborder
{
public string newField1 {get; set;}
public string newField2 {get; set;}
}
Ответ 2
Не работает [NotMapped].
[NotMapped]
public string newField1 {get; set;}
Ответ 3
Прежде всего, вы не должны изменять файл модели данных. Этот файл представляет ваши данные.
Во-вторых, вы не должны возвращать объекты или коллекции модели данных из своего репозитория. Это очень плохая практика, потому что вы создаете зависимость между контроллером/представлением и моделью. Я предлагаю вам создать пользовательские объекты модели, которые содержат необходимые свойства в вашем представлении, сопоставить объекты с этими объектами модели и вернуть объекты модели или коллекции объектов модели из вашего репозитория.