Как сначала игнорировать сущность в коде Entity Framework через настройку - PullRequest
1 голос
/ 25 октября 2011

Допустим, у меня есть 4 класса:

public class Component {}
public class SubComponent1 : Component {}
public class SubComponent2 : Component {}
public class Container : Component { 
  public List<Component> components { get; set;}
}

И я не хочу хранить SubComponent2 в базе данных. Я хочу использовать его во всем приложении как обычный POCO, только хочу, чтобы его игнорировали при попытке сохранить в базу данных. До сих пор я пытался поместить Ignore для этого в мой метод DbContext OnModelCreating:

dbModelBuilder.Ignore<SubComponent2>();

и затем попытался сохранить некоторую структуру, содержащую также SubComponent2, в базе данных, надеясь, что SubComponent2 будет просто проигнорирован и, следовательно, не сохранен. Так что в основном что-то вроде:

var someContainer = new Container{ components = new List<Component>{ 
  new SubComponent1(), new SubComponent2() 
};
context.Containers.Add(someContainer);

и надеялся, что только Контейнер с SubComponent1 попадет в базу данных. Вместо этого я получил

Не удалось найти информацию сопоставления и метаданных для EntityType 'SubComponent2'

Я знаю, что мог бы просто вручную удалить все SubComponent2-s, затем добавить Container в контекст, сохранить и затем каким-то образом заново присоединить SubComponent2-s, но это кажется слишком большой нагрузкой на большие структуры, когда я надеялся, что структура сущностей сможет решить это "для меня"

Знаете ли вы какой-нибудь хороший способ обойти это (возможно, некоторые изменения в настройке dbModelBuilder в моем DbContext)?

1 Ответ

0 голосов
/ 25 октября 2011

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

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