2013-07-18 16 views
6

Trong các mô hình đầu tiên mã EF5 của tôi, việc tạo bản ghi mới hoạt động tốt hơn nếu cơ sở dữ liệu đặt khóa chính. Tôi đang sử dụng Hướng dẫn cho khóa chính và nếu DatabaseGeneratedOption.Identity được đặt, SQL Server sẽ luôn tạo uniqueidentifier.Cách xử lý khóa chính trong khung pháp nhân 5 Mã số

Tuy nhiên, điều này gây ra vấn đề khi tôi đang cố gắng ban đầu hạt giống cơ sở dữ liệu. Nếu tôi đặt hướng dẫn trong phương thức hạt giống của mình, SQL Server sẽ ghi đè nó. Nếu tôi không đặt Guid, tôi sẽ có một kỷ lục mới mỗi lần. Giải pháp được khuyến nghị để tạo hạt giống cho cơ sở dữ liệu bằng cách sử dụng Hướng dẫn cài đặt sẵn và giữ DatabaseGeneratedOption.Identity được đặt cho hoạt động bình thường của tôi là gì?

mô hình lớp

Ví dụ:

[Key] 
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid Id { get; set; } 
public RecordName { get; set; } 
public DateTime? Created { get; set; } 
public DateTime? Updated { get; set; } 

phương pháp hạt giống Ví dụ:

var record = new Record() 
      { 
       Id = new Guid("3B80725E-9550-4933-807F-C2FAA0942225"), 
       RecordName = "New Record", 
       Created = DateTime.UtcNow, 
       Updated = DateTime.UtcNow, 
      }; 
context.Record.AddOrUpdate(record); 
context.SaveChanges(); 

Trả lời

8

AddOrUpdate có tình trạng quá tải cho phép bạn chỉ định phím

Từ MSDN

Vì vậy, bạn cần để cung cấp phương thức với khóa tự nhiên:

context.Record.AddOrUpdate(c => c.RecordName, new Record() 
      { 
       RecordName = "New Record", 
       Created = DateTime.UtcNow, 
       Updated = DateTime.UtcNow, 
      }) 
+0

Tuyệt vời. Tôi không biết phương thức mở rộng bổ sung. Khóa tự nhiên hoạt động rất tốt cho các bản cập nhật. Thật không may với [DatabaseGenerated (DatabaseGeneratedOption.Identity)] Tôi giả sử không có cách nào để ghi đè lên Guid/Id cho bản ghi mới? – roadsunknown

+0

Tôi nghi ngờ điều đó. Khi tôi cần ID được chèn trong khi gieo, tôi thực hiện điều này: var organization = new Organization {Name = "Demo"}; context.Organisations.AddOrUpdate (o => o.Name, tổ chức); SeedMembership (organisation.ID); – Colin

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