Đính kèm thực thể ở trạng thái đã sửa đổi mà không đánh dấu tất cả các thuộc tính là bẩn

Tôi đang cố gắng tìm ra cách đánh dấu các thuộc tính cụ thể của một thực thể tách rời là đã được sửa đổi. Nếu tôi làm như sau, nó sẽ đánh dấu tất cả các thuộc tính đã sửa đổi và sql được tạo sẽ cập nhật tất cả các cột.

/// <summary>
/// Sets the entity in the modified state.
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="entity">The entity.</param>
void IDbContext.Modified<T>(T entity)
{
    DbEntityEntry<T> entry = Entry(entity);
    if (entry.State == EntityState.Modified)
    {
        // if the state is already Modified we don't need to do anything else
        return;
    }

    if (entry.State == EntityState.Detached)
    {
        Set<T>().Attach(entity);

        //TODO: set specific properties modified instead of the the whole object.
        entry.State = EntityState.Modified;
    }
}

Làm cách nào để đặt chỉ các thuộc tính đã thay đổi là Đã sửa đổi?

Tôi đang cố gắng sử dụng điều này trong một lớp triển khai DbContext sẽ được sử dụng bởi một kho lưu trữ chung. Mục đích là để tự động xác định các thuộc tính nào đã thay đổi so với các giá trị cơ sở dữ liệu và sau đó đặt các trạng thái thuộc tính đã thay đổi đó thành Đã sửa đổi. Trong quá trình triển khai hiện tại của tôi, phương thức Modified không có kiến ​​thức về loại thực thể, vì vậy tôi không thể chỉ truy xuất nó bằng ngữ cảnh . Đặt .Find (key) .

Tôi cho rằng tôi có thể thêm quá tải chấp nhận tham số originalEntity , nhưng tôi không muốn nếu có thể.

void IDbContext.Modified<T>(T entity, T originalEntity)
{
    DbEntityEntry<T> entry = Entry(entity);
    if (entry.State == EntityState.Modified)
    {
        // if the state is already Modified we don't need to do anything else
        return;
    }

    if (entry.State == EntityState.Detached)
    {
        Set<T>().Attach(entity);

        entry.OriginalValues.SetValues(originalEntity);
    }
}
9
задан jrummell 26 July 2011 в 12:52
поделиться