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ì?
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();
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
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