保存到数据库时,如何使EF不写与属性匹配的身份列?

时间:2018-11-04 00:07:35

标签: c# database entity-framework sqlite

我在使用SQLite和EntityFramework时遇到问题。 我的实体类具有一个Id属性,该属性映射到也是PK的身份列。通过

将新的实体模型对象插入数据库时
_dbContext.Images.Add(imageEntity);
_dbContext.SaveChanges();

然后它将始终插入 imageEntity.Id = 0 的对象,因为int默认为0。有一个属性 [NotMapped] 并不是我所需要的,它用于当您的实体类中具有表中不存在的其他属性时。我的表中有我的,我只是不想写它,数据库应该照顾这个。

我想让EF在幕后产生这样的声明:

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

代替此:

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

有人知道怎么做吗?

后面的insert语句也可以工作(如果已经没有Id = 0条目),但是为什么呢?不应始终保护Identity列免受外部值插入?

更新:

作为一种解决方法,我试图让EF这样为我创建一个新的实体模型

var temp = _dbContext.Images.Create();

我想也许以后我将能够替换除Id值之外的所有内容并将其保存到数据库,但是我得到的再次是一个temp.Id = 0对象。我不知道EF还是SQLite在骗我

1 个答案:

答案 0 :(得分:0)

您可以尝试:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

作为属性的属性。  剩下的责任是在插入到db时生成值