2012-09-05 16 views
5

Có cách nào để gửi thuộc tính với defaultValue nhưng cập nhật nó với kết quả tính toán cơ sở dữ liệu không? Có một kích hoạt trong cơ sở dữ liệu, cho đầu vào -1 kích hoạt một thủ tục tính giá trị mới. Làm cách nào để lấy lại giá trị?Tôi làm cách nào để có được Id của thực thể được chèn trong khung Đối tượng khi sử dụng giá trị mặc định?

<Property Name="ID" Type="int" Nullable="false" StoreGeneratedPattern="None" DefaultValue="-1" /> 

var x = new Stuff(); 
db.Stuff.AddObject(x); 
db.SaveChanges(); 
return x.ID //gives -1, but the computed value should be different. 
+0

Tôi đã thử db.Refresh (System.Data.Objects.RefreshMode.StoreWins, x); nhưng không có may mắn, phương thức làm mới có thể tìm kiếm cơ sở dữ liệu bằng ID, đó là giá trị tôi cần làm mới. –

Trả lời

-2
using (var context = new MyContext()) 
    { 
     context.MyEntities.AddObject(newObject); 
     context.SaveChanges(); 

     int id = newObject.Id; // Will give u the autoincremented ID 
    } 
+3

Anh ấy không sử dụng tăng tự động mà là trình kích hoạt để tạo ra giá trị .. –

11

Bạn cần phải tải lại các thực thể sau savechanges.Because nó đã bị thay đổi bởi một nút bấm cơ sở dữ liệu mà không thể được theo dõi bởi EF. Vì vậy, chúng tôi cần tải lại thực thể từ DB,

var x = new Stuff(); 
db.Stuff.AddObject(x); 
db.SaveChanges(); 
db.Entry(x).GetDatabaseValues(); 

return x.ID; 
+0

Điều này có vẻ tốt, nhưng không có mục nhập nào trong ngữ cảnh db –

+0

Bạn có sử dụng kiểu đầu tiên không? –

+1

vâng, tôi đang sử dụng mẫu trước –