2016-09-27 9 views
2

У меня есть вопрос, используя «Вставка Т» метода nPoco с таблицей MySQL определяется как:npoco.Insert <T> терпит неудачу на столе без AutoIncrement первичный ключ

CREATE TABLE `TestTable` (
    `Id` INT(11) NOT NULL, 
    `StatusEnum` INT(11) NOT NULL, 
    PRIMARY KEY (`Id`) 
) 

Database.Entity определяется как ...

[TableName("operations.TestTable")] 
[PrimaryKey("Id")] 
[ExplicitColumns] 
public class TestTable 
{ 
    [Column] 
    public int Id { get; set; } 

    [Column] 
    public Status StatusEnum { get; set; } = Status.Default; 
} 

фрагмент кода:

// this works 
var foo = new TestTable { Id = 123 }; 
database.Execute(
    "insert into operations.TestTable (Id, StatusEnum) values (@0, @1)", 
    foo.Id, 
    foo.StatusEnum); 

// this throws "Field 'Id' doesn't have a default value" 
var foo2 = new TestTable { Id = 456 }; 
database.Insert<TestTable>(foo2); 

Глядя на SQL, порожденного nPoco для т он две вставки, я вижу это (из моего журнала файла) ...

SQL: insert into operations.TestTable (Id, StatusEnum) values (?0, ?1) -> ?0 [Int32] = "123" -> ?1 [Int32] = "1" 
SQL: INSERT INTO operations.TestTable (`StatusEnum`) VALUES (?0); SELECT @@IDENTITY AS NewID; -> ?0 [Int32] = "1" 

Для метода «Вставка Т», почему nPoco думает, что столбец Id представляет собой столбец идентификаторов? Удаление атрибута «PrimaryKey» из определения класса не помогает.

ПРИМЕЧАНИЕ. Этот вопрос похож на this question, но он может быть несколько иным.

+0

Попробуйте изменить первичный ключ определение [PrimaryKey ("Id", Autoincrement = ложь)] – JAZ

+0

Вот оно! Добавьте решение, и я отметю его. Я не уверен, почему я об этом не думал. Хотя кажется странным, что по умолчанию это «истина», – Tony

ответ

4

Попробуйте изменить первичный ключ определение

[PrimaryKey("Id", AutoIncrement=false)]