我有一个非常奇怪的问题,我无法理解。
我在数据库中有一个非常简单的表,用于将行从一个表映射到另一个表。此表的目的是将多对多关系更改为2个1对多关系。
我在Entity Framework的edmx查看器中创建了这个表,并通过"从模型生成数据库"将其导出到SQlite。使用必要的.tt文件。
每当我尝试在代码中向表中添加一行时,我总会收到错误消息:
"操作失败:由于一个或多个外键属性不可为空,因此无法更改关系。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。"
我用来添加的测试代码:
Dim PCMap As New PromProdBuyClauseMapping
PCMap.BuyClauseID = PromBC.ID
PCMap.ProductID = ProdIDs(RND.Next(0, ProdIDs.Count - 1)) ''Select rand prod
db.PromProdBuyClauseMapping.Add(PCMap)
db.SaveChanges()
所有值似乎都可以。行已经填充在必要的相关表中。 db.savechanges抛出错误。这曾经工作过。我启用了对SQLite的FK支持并更改了一些代码,但由于某种原因我不确定它已停止工作。我尝试通过在连接字符串中将true更改为false来禁用FK支持,奇怪的是这不起作用。
foreign keys=False
用于创建表的SQLite是:
CREATE TABLE [PromProdBuyClauseMapping] (
[BuyClauseID] integer NOT NULL ,
[ID] integer PRIMARY KEY AUTOINCREMENT NOT NULL ,
[ProductID] integer NOT NULL
,CONSTRAINT [FK_PromProdBuyClauseMappingPromBuyClause]
FOREIGN KEY ([BuyClauseID])
REFERENCES [PromBuyClause] ([ID])
,CONSTRAINT [FK_GeneralProductsPromProdBuyClauseMapping]
FOREIGN KEY ([ProductID])
REFERENCES [GeneralProducts] ([ID])
);
我已经对这个问题进行了很多研究,我发现另外一个人在添加行时遇到了问题而不是删除它们,而且他们的问题似乎与我的相似。我也尝试过重新生成数据库。
答案 0 :(得分:0)
我回去看了看我改变的东西。事实证明,为我实现的其中一个部分类添加了一个属性,访问数据库本身就是问题所在。将此属性更改为函数可以解决问题。我不完全确定为什么会导致这个问题。虽然可能没有尝试访问数据库,但我还有其他属性可用于这些分类。