EF - 对于已创建的实体:无法将值 NULL 插入“Id”列、“Languages”表;列不允许空值
Posted
技术标签:
【中文标题】EF - 对于已创建的实体:无法将值 NULL 插入“Id”列、“Languages”表;列不允许空值【英文标题】:EF - For an already created entity: Cannot insert the value NULL into column 'Id', table 'Languages'; column does not allow nulls 【发布时间】:2016-08-29 17:38:13 【问题描述】:我在尝试插入新项目但将其与已创建的(语言)记录链接时收到该错误:
var languageRepository = RepositoryFactory.CreateReadOnly<Language>();
_defaultLanguage = languageRepository.FirstOrDefault(l => l.IsDefault);
(...)
newItem.Images = new List<Image>
new Image
FileName = filename,
Language = _defaultLanguage
;
在这种情况下_defaultLanguage
已经存在于数据库中,那么我不知道为什么它试图将其作为新记录插入,而不是仅仅链接到已经存在的 Id。
_defaultLanguage的内容:
有什么想法可以帮上忙吗?
【问题讨论】:
Language
是什么类型,请发布 Images 密钥以及 Item 密钥。
您必须添加更多代码才能获得帮助。
@AlbertoMontellano,当您将CreateReadOnly
更改为正常提取时,问题是否仍然存在?
如果 newItem 是您编写的用于保存新项目的类的对象,那么我们需要查看该代码。如果您只是使用 newItem.Save(),那么我们需要在您已经向我们展示的代码的上下文中查看该代码。有关如何正确执行此操作的更多信息,请参见此处:***.com/help/mcve
@OrelEraki 希望你能把你的答案放在这里吗?将来会帮助其他人。
【参考方案1】:
CreateReadOnly
看起来很可疑。
尝试将以下内容更改为正常提取。
var languageRepository = RepositoryFactory.CreateReadOnly<Language>();
我相信Detach(Untracked)
提取的条目。
【讨论】:
什么是“正常提取”? 我猜不出他是怎么做到的RepositoryFactory
我猜这有点像.GetRepositoryInstance<Language>()
那么你为什么要回答一个不清楚的问题呢?但是你如何定义“正常提取”?
@GertArnold 这是来自 OP 的反馈:@OrelEraki you're right! I changed that to normal extraction and it worked.
。希望他解决了这个问题。因此我认为这个提示适合作为答案。
不,不是。它对未来的读者一点用处都没有。你自己创造了这个词,所以我猜你一定知道你在说什么。以上是关于EF - 对于已创建的实体:无法将值 NULL 插入“Id”列、“Languages”表;列不允许空值的主要内容,如果未能解决你的问题,请参考以下文章
无法将值 NULL 插入列“TaskID”、表“TEAM.dbo.Task”;列不允许空语句已终止[重复]
Entity Framework 6 GUID 作为主键:无法将值 NULL 插入列“Id”、表“FileStore”;列不允许空值