Trong ứng dụng của tôi, tôi đã đoạn mã sau ...Entity Framework Lỗi: Một đối tượng với một giá trị EntityKey rỗng không thể được gắn vào một bối cảnh đối tượng
public Boolean SaveUserInformation(UserInfoDTO UserInformation)
{
return dataManager.SaveUserInfo(new UserInfo()
{
UserInfoID = UserInformation.UserInfoID.HasValue ? UserInformation.UserInfoID.Value : 0,
UserID = UserInformation.UserID,
ProxyUsername = UserInformation.ProxyUsername,
Email = UserInformation.Email,
Status = UserInformation.Status
});
}
Mã này gọi một phương thức trên một đối tượng DataManager mà sử dụng Entity Framework ...
public Boolean SaveUserInfo(UserInfo userInfo)
{
try
{
//Validate data prior to database update
if (userInfo.UserID == null) { throw new Exception("UserInfoDomainModel object passed to PriorityOne.Data.DataManager.SaveUserInfo with UserID property set to NULL."); }
if (userInfo.ProxyUsername == null) { throw new Exception("UserInfoDomainModel object passed to PriorityOne.Data.DataManager.SaveUserInfo with ProxyUsername property set to NULL."); }
if (userInfo.Email == null) { throw new Exception("UserInfoDomainModel object passed to PriorityOne.Data.DataManager.SaveUserInfo with Email property set to NULL."); }
if (userInfo.UserInfoID == 0)
{
//Perform Insert
using (PriorityOneEntities entities = new PriorityOneEntities())
{
entities.UserInfoes.AddObject(userInfo);
entities.SaveChanges();
}
}
else
{
//Perform Update
using (PriorityOneEntities entities = new PriorityOneEntities())
{
entities.Attach(userInfo);
entities.SaveChanges();
}
}
return true;
}
catch (Exception ex)
{
//TODO: Log Error
return false;
}
}
Chèn mã này hoạt động tốt. Nhưng khi tôi cố gắng thực hiện một bản cập nhật tôi nhận được một lỗi nói: "Một đối tượng có giá trị EntityKey null không thể được gắn vào một bối cảnh đối tượng."
Nó xảy ra trên dòng mã này: entity.Attach (userInfo);
Những gì tôi đang cố gắng hoàn thành là tránh thực hiện một chuyến đi vòng đến cơ sở dữ liệu chỉ để chọn bản ghi mà sau này tôi sẽ thực hiện thay đổi và cập nhật, do đó thực hiện hai chuyến đi vòng đến cơ sở dữ liệu.
Bất kỳ ý tưởng nào đang xảy ra hoặc cách tôi có thể thực hiện tốt hơn điều này?
Cảm ơn.
Đó là điều đầu tiên tôi nghĩ đến nhưng lỗi sẽ khác. Đúng? – Shymep
Theerror là vì thực thể của bạn ở trạng thái "Đã thêm". Nhưng bạn có một thực thể tương tự trong cơ sở dữ liệu với cùng khóa chính. bạn phải tự thay đổi trạng thái. Thử nghiệm và hoạt động ok. – Kamyar
Tôi dường như không có quyền truy cập vào phương thức Entry() trên đối tượng thực thể của tôi. Bạn có thể cho tôi thêm một chút hướng dẫn không? – jdavis