Обновление отношения без загрузки свойства навигации

У меня есть две сущности 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();  
}
Другие вопросы по тегам