2016-10-24 16 views
6

Tôi đang cố chèn dữ liệu bằng Dapper.Contrib, trong bảng trong đó cột khóa chính không phải là cột nhận dạng.Làm cách nào để chèn dữ liệu khi cột khóa chính không phải là cột nhận dạng?

Bảng cơ sở dữ liệu được tạo ra với kịch bản này:

begin transaction 

create table 
    dbo.Foos 
    (
     Id int not null, 
     Name nvarchar(max) not null 
    ) 
go 

alter table 
    dbo.Foos 
add constraint 
    PK_Foos primary key clustered 
    (
     Id 
    ) 

go 

commit 

Đây là lớp học C#:

public class Foo 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

Khi chèn dữ liệu như thế này:

connection.Insert(new Foo() 
{ 
    Id = 1, 
    Name = "name 1" 
}); 

tôi nhận được như sau lỗi:

Cannot insert the value NULL into column 'Id', table 'FooDatabase.dbo.Foos'; column does not allow nulls. INSERT fails.

Dapper chính xác giả định, theo quy ước, rằng Id là khóa chính, nhưng nó không chính xác giả định rằng nó là một cột nhận dạng. Làm thế nào tôi có thể chỉ ra rằng nó không phải là một cột nhận dạng?

Trả lời

5

Bạn có thể sử dụng thuộc tính ExplicitKey theo this issue.

public class Foo 
{ 
    [ExplicitKey] 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

Lưu ý rằng giá trị trả về là không id của mặt hàng đó chèn vì nó thường là khi bạn gọi Insert mà thay vào đó là luôn 0.

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