Обновление отношения без загрузки свойства навигации
У меня есть две сущности Order
а также Customer
со следующим соотношением:
Order
* -1Customer
(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 ответ
Объявите оба класса со свойствами навигации друг к другу. Отметьте одну из таблиц (зависимая таблица) с помощью 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();
}