7

Chúng tôi hiện đang sử dụng phương pháp dưới đây phụ thuộc vào IObjectContextAdapter trong một Kho lưu trữ trừu tượng. Từ những gì tôi đang đọc, nó xuất hiện rằng bất cứ điều gì liên quan đến ObjectContext đang được cắt nhỏ ra khỏi Entity Framework Core. Phương thức dưới đây là nơi duy nhất chúng ta phụ thuộc vào bất cứ thứ gì liên quan đến ObjectContext.Cách lấy giá trị khóa chính với Entity Framework Core

Chúng tôi muốn nâng cấp lên Entity Framework Core. Đây là khối đường duy nhất của chúng tôi. Có cách nào để có được giá trị của khóa chính của một thực thể với Entity Framework Core apis không?

// Entity Framework 
public virtual int GetKey(T entity) 
{ 
    var oContext = ((IObjectContextAdapter)_DbContext).ObjectContext; 
    var oSet = oContext.CreateObjectSet<T>(); 
    var keyName = oSet.EntitySet.ElementType 
           .KeyMembers 
           .Select(k => k.Name) 
           .Single(); 

    return (int)entity.GetType().GetProperty(keyName).GetValue(entity, null); 
} 

Trả lời

12

Tôi cũng phải đối mặt với vấn đề tương tự và tìm thấy các giải pháp sau đây

// Entity Framework Core 
public virtual int GetKey<T>(T entity) 
{ 
    var keyName = Context.Model.FindEntityType(typeof (T)).FindPrimaryKey().Properties 
     .Select(x => x.Name).Single(); 

    return (int)entity.GetType().GetProperty(keyName).GetValue(entity, null); 
} 
+0

nhờ cho câu trả lời này. Có vẻ như nó sẽ hoạt động. Tôi không có dự án đó vào lúc này, nhưng tôi hy vọng sẽ trở lại trong tương lai gần. Tôi sẽ thử nó ngay khi có thể. – cResults

+0

là Context.Model được thêm vào trong EF7? Tôi đang cố gắng thay đổi trong môi trường EF6, nhưng phá vỡ vì tài sản đó không tồn tại. – cResults

+0

Có, đây là thuộc tính EF7 (Core) – YuriyP

Các vấn đề liên quan