Рассмотрим следующий сценарий:
public class Entity1
{
virtual public Int32 ID { get; set; }
[Required]
virtual public String Name { get; set; }
[Required]
virtual public Entity2 ReferenceToEntity2 { get; set; }
}
public class Entity2
{
virtual public Int32 ID { get; set; }
[Required]
virtual public String Name { get; set; }
virtual public IList<Entity1> ListOfEntity1 { get; set; }
}
[TestClass]
public class EntityFrameworkTests
{
[TestMethod]
public void Should_save_entity_with_reference_to_entity_with_required_fields()
{
using (var db = new MyContext())
{
var entity1 = new Entity1
{
Name = "My name",
ReferenceToEntity2 = new Entity2 { ID = 1 } // reference (Entity2 with ID=1) already exists in the database
};
db.Entity1List.Add(entity1);
db.SaveChanges(); // exception here
}
}
[TestMethod]
[ExpectedException(typeof(DbEntityValidationException))]
public void Should_not_save_empty_entity2_name()
{
using (var db = new MyContext())
{
var entity2 = new Entity2 { Name = "" };
db.Entity2List.Add(entity2);
db.SaveChanges();
}
}
}
Первый тест не пройден.Возникает DbEntityValidationException, ссылаясь на свойство Name Entity2 при попытке сохранить экземпляр Entity1.
Я знаю, что мог бы загрузить экземпляр entity2 по ID и связать его с помощью entity1.ReferenceToEntity2 = db.Entity2List.Find (entity2Id)), например.Но на самом деле у меня есть сущность с множеством ссылок, и я не хочу заходить в базу данных только 10 раз, чтобы связать внешний ключ!
Можно ли вставить в базу данных новый экземпляр entity1, относящийся ксуществующая запись entity2 без необходимости обращаться к базе данных для получения entity2?
Заранее спасибо!