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

Прежде всего, вы не должны изменять файл модели данных. Этот файл представляет ваши данные.

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