Tôi đang chuyển sang Khung thực thể từ mô hình và cơ sở dữ liệu hiện có. Trong cơ sở dữ liệu đó, có một số bảng có các cột GUID không phải là các khóa chính (hoặc các khóa ở tất cả!). Mỗi bảng có một cột ID. Các cột GUID có thuộc tính ROWGUIDCOL được định nghĩa trên chúng, cũng như một DEFAULT (newid()).Cột GUID tự tạo không phải là khóa chính trong Khuôn khổ thực thể
Bây giờ, khi tôi chèn vào DB, tôi nhận được tất cả các số không cho cột này.
Tôi đã cố gắng sử dụng các chú thích dữ liệu:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Guid {get; set;}
Vấn đề ở đây là nó giảm tài sản nhận dạng trên cột ID của tôi (và mang lại cho tôi chèn lỗi). Ngoài ra, tôi nhận thấy rằng đối với sự di cư sau, EF thực sự tạo SQL giống hệt nhau cho cả hai phương pháp lên xuống:
public override void Up()
{
AlterColumn("dbo.Client", "Guid", c => c.Guid(nullable: false, identity: true));
}
public override void Down()
{
AlterColumn("dbo.Client", "Guid", c => c.Guid(nullable: false));
}
Với sql tạo của:
ALTER TABLE [dbo].[Client] ALTER COLUMN [Guid] [uniqueidentifier] NOT NULL
Tại sao di cư trên tạo cùng sql cho cả hai câu lệnh? Làm thế nào để tôi có EF để tạo GUID? Tôi có thể/tôi phải làm điều này trong không gian khách hàng (mã)? Nếu tôi phải, làm thế nào tôi có thể đảm bảo tính duy nhất trên các bảng?
Tôi không biết EF nhưng có vẻ như bạn đang gây nhầm lẫn về đặc tính nhận dạng và giá trị mặc định. Một kiểu dữ liệu GUID không thể có thuộc tính "identity" trong máy chủ SQL – jazzytomato
Khóa chính của bạn có được trang trí với thuộc tính [Key] không? – Keith
DatabaseGenerationOption.Identity nên được sử dụng cho cột nhận dạng. Bạn đã thử DatabaseGenerationOption.Computed thay thế chưa? Nó sẽ ngăn EF gửi một giá trị khi chèn cột, và nó sẽ kéo giá trị tạo ra db đúng trên SaveChanges – ESG