Tôi đang sử dụng Khung thực thể 6 và tôi cần cập nhật các thuộc tính của một thực thể.Cập nhật thuộc tính Thực thể tại EF, nơi bất động sản là một thực thể khác
Tôi đã các đối tượng sau:
public class File
{
public Int32 Id { get; set; }
public Byte Data { get; set; }
public DateTime Updated { get; set; }
public virtual Mime Mime { get; set; }
}
public class Mime
{
public Int32 Id { get; set; }
public String Name { get; set; }
public virtual ICollection<File> Files { get; set; }
}
Sau đó, tôi sử dụng như sau:
_repository.Update<File>(file, x => x.Data, x => x.Mime, x => x.Updated);
Phương pháp kho được như sau:
public void Update<T>(T entity,
params Expression<Func<T, Object>>[] properties)
where T : class
{
_context.Set<T>().Attach(entity);
foreach (var property in properties)
{
MemberExpression expression =
property.Body is MemberExpression ?
(MemberExpression)property.Body :
(MemberExpression)(((UnaryExpression)property.Body)
.Operand);
_context.Entry<T>(entity)
.Property(expression.Member.Name).IsModified = true;
}
}
này hoạt động tốt cho Data
và Đã cập nhật các thuộc tính nhưng không cho thuộc tính Mime
. Tôi gặp lỗi:
The property 'Mime' on type 'File' is not a primitive or complex property. The Property method can only be used with primitive or complex properties. Use the Reference or Collection method.
Có thể thực hiện công việc này và tích hợp nó vào phương pháp lưu trữ của tôi không?
Câu hỏi đầu tiên là: tại sao bạn có phương pháp 'Cập nhật 'phức tạp này? Tại sao bạn không thể để nó theo dõi thay đổi của EF để đánh dấu các thuộc tính như đã sửa đổi? Bức tranh lớn hơn là gì? –
Thực thể Tệp có thuộc tính Dữ liệu có thể là loại lớn vì nó chứa tệp ... Vì vậy, tôi muốn cập nhật một số trường mà không tải dữ liệu vào bộ nhớ. Điều này có nghĩa không? Điều này làm việc khi tôi không có các thực thể liên quan đến nó. –
Bạn nên xem * tách bảng *. –