Как заставить EF не записывать свойство, совпадающее со столбцом идентификаторов, при сохранении в БД? - PullRequest
0 голосов
/ 04 ноября 2018

У меня проблема с SQLite и EntityFramework. Мой класс сущности имеет свойство Id, которое отображается в столбец идентификаторов, который также является PK. Когда я вставляю новый объект модели сущности в свою БД через

_dbContext.Images.Add(imageEntity);
_dbContext.SaveChanges();

, тогда он всегда будет вставлять объект с imageEntity.Id = 0 , потому что 0 по умолчанию для int. Есть атрибут [NotMapped] , который мне не нужен, он нужен, когда в вашем классе сущности есть дополнительное свойство, которого нет в таблице. В таблице есть моя, я просто не хочу ее писать, об этом должна позаботиться БД.

Я бы хотел сделать EF за кадром, чтобы сделать такое утверждение:

insert into Images (Views, Rating) values (100, 5.5)

вместо этого:

insert into Images (Id, Views, Rating) values (0, 100, 5.5)

Кто-нибудь знает, как это сделать?

Также работает последний оператор вставки (если записи Id = 0 уже нет), но почему? Разве столбец идентификаторов не должен всегда защищаться от вставки внешних значений?

UPDATE:

В качестве обходного пути я попытался позволить EF создать для меня новую модель сущности, например,

var temp = _dbContext.Images.Create();

Я подумал, что, возможно, тогда я смогу заменить все, кроме значения Id, и сохранить его в БД, но я снова получу объект с temp.Id = 0. Я не знаю, дурачит ли меня EF или SQLite

1 Ответ

0 голосов
/ 04 ноября 2018

Вы можете попробовать:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

Как атрибут вашей собственности. Это оставляет ответственность за генерацию значений при вставке в db

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...