2014-09-25 21 views
7

Tôi đang sử dụng EF để thêm bản ghi. Tôi muốn lấy ID được chèn cuối cùng. Sau đây là mã của tôi:Cách lấy ID được chèn lần cuối nếu sử dụng Khung thực thể

string query = "INSERT INTO MyTable(PONumber, Status, UpdatedBy, UpdatedOn, CreatedOn) VALUES(@PO_NUMBER, '0', @STAFF, GETDATE(), GETDATE())"; 

parameterList = new List<object>(); 
parameterList.Add(new SqlParameter("@PO_NUMBER", poNumber)); 
parameterList.Add(new SqlParameter("@STAFF",staff)); 

parameters = parameterList.ToArray(); 

result = db.Database.ExecuteSqlCommand(query, parameters); 

query = "SELECT NewID = SCOPE_IDENTITY();"; 

var id = db.Lists.SqlQuery(query); 

Làm cách nào để lặp lại bản ghi từ var id?

+0

Nếu bạn đang sử dụng EF - tại sao bạn đang thực hiện 'INSERT' với SQL thô? ** Toàn bộ điểm ** của EF là bạn có thể xử lý các đối tượng ** đẹp ** thay vì SQL thô! Chỉ cần tạo 'MyObject', thiết lập các thuộc tính, thêm nó vào ngữ cảnh EF, gọi' .SaveChanges() 'và có thuộc tính' IDENTITY' được đặt cho bạn! Không lộn xộn xung quanh với SQL cần thiết .. –

+0

@marc_s Đã làm việc trên asp.net lần đầu tiên trên asp.net và EF. Vì vậy, ví dụ tôi thấy tôi đã cố gắng thực hiện nó dựa trên nhu cầu của tôi. Bạn có thể giúp tôi tìm ra ví dụ bạn đang nói về cái gì? – Volatil3

Trả lời

17

Nếu bạn đang sử dụng EF, toàn bộ vấn đề là bạn không phải xoay quanh với SQL thô. Thay vào đó, bạn sử dụng các lớp đối tượng được tạo bởi EF tương ứng với các bảng cơ sở dữ liệu của bạn.

Vì vậy, trong trường hợp của bạn, tôi thà làm một cái gì đó như thế này:

// create the EF context 
using(YourEFContext ctx = new YourEFContext()) 
{ 
    // create a new "MyTable" class 
    MyTable newEntity = new MyTable(); 

    // set its properties 
    newEntity.PoNumber = poNumber; 
    newEntity.Status = 0; 
    newEntity.CreatedOn = DateTime.Now; 
    newEntity.UpdatedOn = DateTime.Now; 
    newEntity.UpdatedBy = staff; 

    // add new entity to EF context 
    ctx.MyTable.Add(newEntity); 

    // save changes to database 
    ctx.SaveChanges(); 

    // read out your newly set IDENTITY value 
    int newIdentityValue = newEntity.ID; 
} 

Sạch hướng đối tượng mã - không SQL lộn xộn cần ở tất cả!

0

Điều gì sẽ xảy ra nếu bạn cần chèn vào bảng mà không kích hoạt xác thực trên các mô hình được sử dụng để chèn vào bảng? IE trong DB một lĩnh vực là không cần thiết và một chèn null sẽ làm việc, nhưng trong mô hình EF nó là một lĩnh vực cần thiết?

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