2010-05-24 27 views
5

Tôi đang cố gắng thực hiện chèn đơn giản bằng khóa ngoài, nhưng có vẻ như tôi cần sử dụng db.SaveChanges() cho mỗi lần chèn bản ghi. Làm cách nào tôi có thể quản lý để chỉ sử dụng một số db.SaveChanges() ở cuối chương trình này?Tại sao tôi không thể chèn bản ghi với khóa ngoài trong một yêu cầu máy chủ duy nhất?

public static void Test() 
{ 
    using (var entities = new DBEntities()) 
    { 
     var sale = 
      new SalesFeed 
      { 
       SaleName = "Stuff...", 
      }; 
     entities.AddToSalesFeedSet(sale); 

     var phone = 
      new CustomerPhone 
      { 
       CreationDate = DateTime.UtcNow, 
       sales_feeds = sale 
      }; 
     entities.AddToCustomerPhoneSet(phone); 

     entities.SaveChanges(); 
    } 
} 

Sau khi chạy đoạn mã trên tôi nhận được ngoại lệ này:

System.Data.UpdateException: Một lỗi đã xảy ra khi cập nhật các mục. Xem InnerException để biết chi tiết. Giá trị được chỉ định không phải là một thể hiện của một loại hằng số hợp lệ Tên tham số: giá trị.

EDIT: Mã ví dụ đã thay đổi và ngoại lệ trả về được thêm vào.

+0

Hiển thị thêm chi tiết về cách bạn nhận biến "tệp"? –

+0

@Andrew: Đã thêm tệp biến nguồn. –

+0

Dường như với tôi bạn có những thứ hơi lạc hậu - bạn thêm một mục vào DirectorySet với một tham chiếu đến tập tin - nó không phải là cách khác xung quanh ?? Một tệp nằm bên trong một thư mục - vì vậy tệp nên tham chiếu đến thư mục - bạn có một mục nhập Thư mục và bất kỳ số Tệp nào tham chiếu đến đó? –

Trả lời

12

Apperantly sử dụng UNSIGNED BIGINT nguyên nhân vấn đề này. Khi tôi chuyển sang SIGNED BIGINT mọi thứ đã hoạt động như dự kiến.

+1

Tôi đã có cùng một vấn đề với UNSIGNED INTS bằng cách sử dụng thực thể với một backend MySQL. Cơ sở dữ liệu của bạn là gì? – jwrush

+1

Tôi cũng vậy với MySQL + BIGSIGNED BIGINT. –

2

tôi đã cố gắng để làm điều này "đúng cách":

alt text http://i45.tinypic.com/mcw5co.png

Và sau đó tôi đã viết ứng dụng thử nghiệm nhỏ này để quét một thư mục, lưu trữ các thư mục và tất cả các file của nó trong hai bảng:

static void Main(string[] args) 
{ 
    string directoryName = args[0]; 

    if(!Directory.Exists(directoryName)) 
    { 
     Console.WriteLine("ERROR: Directory '{0}' does not exist!", directoryName); 
     return; 
    } 

    using (testEntities entities = new testEntities()) 
    { 
     StoredDir dir = new StoredDir{ DirName = directoryName }; 
     entities.AddToStoredDirSet(dir); 

     foreach (string filename in Directory.GetFiles(directoryName)) 
     { 
     StoredFile stFile = new StoredFile { FileName = Path.GetFileName(filename), Directory = dir }; 
     entities.AddToStoredFileSet(stFile); 
     } 

     try 
     { 
     entities.SaveChanges(); 
     } 
     catch(Exception exc) 
     { 
     string message = exc.GetType().FullName + ": " + exc.Message; 
     } 
    } 
} 

Như bạn có thể thấy, tôi chỉ có một cuộc gọi duy nhất đến .SaveChanges() vào cuối - điều này hoạt động như một nét duyên dáng, mọi thứ như mong đợi.

Something về cách tiếp cận của bạn phải được điều chỉnh các hệ thống EF .....

+0

OK, tôi sẽ kiểm tra nó và lấy lại cho bạn kết quả. Cảm ơn. –

+0

Tôi đã thử nó, nhưng một lần nữa một ngoại lệ đã được ném (xem câu hỏi cập nhật). –

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