Tôi đang gặp rắc rối với việc phát hiện những thay đổi của một tài sản chuyển hướng:Entity Framework sẽ không phát hiện những thay đổi bất động sản chuyển hướng
mô hình thử nghiệm của tôi trông như thế này:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public int Id { get; set; }
public string Name { get; set; }
}
Tôi đã tạo ra và lưu một đối tượng kiểu Person với cả thuộc tính Name và Address được gán. Vấn đề của tôi là nếu tôi lấy lại đối tượng Person từ cơ sở dữ liệu và tôi thay đổi thuộc tính Address (ví dụ thành Null) thì e.f. không phát hiện sự thay đổi! Mã của tôi là thế này:
using (var ctx = new EFContext())
{
Person p = ctx.People.First();
//p.Address IS NOT NULL!
p.Address = null;
var entry = ctx.Entry(p);
}
Tại sao entry.State
Unchanged?
Chỉnh sửa: Nếu tôi gọi SaveChanges, bản ghi được lưu chính xác (Địa chỉ trở thành null)!
Chỉnh sửa 2: Tôi đã tạo thuộc tính khóa ngoài như đề xuất và nếu tôi kiểm tra đối tượng Person trong studio trực quan, trạng thái được sửa đổi .. nếu tôi không dừng với trình gỡ rối kiểm tra giá trị của đối tượng trạng thái không thay đổi!
Chỉnh sửa 3: Đang tải đối tượng Person bằng ctx.People.Include (x => x.Address) .irst(); giải quyết vấn đề. Có cách nào để tránh gọi Bao gồm và tiếp tục sửa đổi thuộc tính Địa chỉ thay vì địa chỉ AddressId không?
Điều gì xảy ra nếu bạn gọi ctx.DetectChanges()? – Maarten
Không có gì. Kết quả là như nhau!! – Mones