Мне интересно, возможно ли, что я пытаюсь сделать, используя Entity Framework (5). Чтобы быть простым, у меня есть 2 классовEntity Framework избегает вставки удвоений
public class Value
{
public int Id {get; set;}
public int Content {get; set;}
public virtual ICollection<Constraint> Constraints {get; set;}
}
public class Constraint
{
public int Id {get; set;}
public string Name {get; set;}
public string Type {get; set;}
}
В моей бизнес-логике я считаю два аналогичных Constraint, если пара (имя, тип) аналогична. Где-то в коде я связываю Constraint к значению, как:
Value v1 = new Value() { Content = 42 };
Constraint c1 = new Constraint() {Name = "A", Type = "B" };
v1.Constraints.Add(c1);
Value v2 = new Value() { Content = 43 };
Constraint c2 = new Constraint() {Name = "A", Type = "B" };
v2.Constraints.Add(c2);
, а затем, у меня есть другая часть ПЕРСИСТЕНТНОСТИ слоя, ответственны для вставки значений в базе данных:
ValueRepository.Insert(v1);
ValueRepository.Insert(v2);
Имея уникальных ограничение на таблицу «Ограничение» на пару (Name, Type), я хочу избежать ошибки ввода при вставке c2. Как мне сказать EF рассмотреть c2 так же, как c1?
PS: Я не могу использовать репозиторий Constraint для инициализации объектов Constraint.
Дайте значение Id при вставке данных в базу данных. –
Какие еще свойства имеет Constraint, что привело бы к существованию более чем одного объекта с одинаковым значением ключа? Что вы намерены делать, когда есть две Ограничения с идентичными ключами - уведомить пользователя и попросить их изменить ввод, или выбросить другое исключение вместо уникального нарушения ключа? Или вы хотите удалить всех обманов, кроме одного? –
Я не хочу сохранять дубликаты одного и того же ограничения в таблице базы данных, это то, что я пытаюсь сделать. добавив к этому, после вставки я хочу, чтобы c1 указывал значения v1 и v2, а не только v1. – enenkey