Обновление отношения без загрузки свойства навигации - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть две сущности Order и Customer со следующим соотношением:

Order * -1 Customer

(Customer - это свойство навигации в Order)

Если я легко определю CustomerId как внешний ключ в Order, я могу обновить Customer Order с помощью следующего кода:

using(var ctx = new MyContext)
{
    var ord = new Order{ Id = 1, CustomerId = 10 };
    ctx.Orders.Attach(ord);
    ctx.Entry(ord).Property(x=>x.CustomerId).IsModified = true;
    ctx.SaveChanges();  
}

Но если я не определю CustomerId в Order, есть ли подобный способ обновить это отношение без загрузки Customer сущности?

следующий код вызывает ошибку во время выполнения:

using(var ctx = new MyContext)
{
    var ord = new Order{ Id = 1, Customer = new Customer {Id = 10}};
    ctx.Orders.Attach(ord);
    ctx.Entry(ord).Property(x=>x.Customer).IsModified = true;
    ctx.SaveChanges();  
}

потому что мы не можем использовать Property() для свойств навигации.

1 Ответ

0 голосов
/ 09 сентября 2018

Объявляем оба класса со свойствами навигации друг к другу. Отметьте одну из таблиц (зависимая таблица) атрибутом ForeignKey в ее первичном ключе.

public class Customer
{
     public int Id { get; set; }

     public ICollection<Order> Orders { get; set; }
}

public class Order
{
     public int Id { get; set; }
     ...

     public int CustomerId { get; set; }

     [ForeignKey("CustomerId")]
     public Customer Customer{ get; set; }
}

После Remigrate вы можете сделать это следующим образом:

using(var ctx = new MyContext)
{
    var ord = new Order{ Id = 1, Customer = new Customer {Id = 10}};
    ctx.Orders.Add(ord);
    ctx.SaveChanges();  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...