使用 Sqlite "The relationship could not be changed"在实体框架 5 上添加行时出错



我有一个非常奇怪的问题,我无法理解。

我在数据库中有一个非常简单的表,它将行从一个表映射到另一个表。此表的目的是将多对多关系更改为2对多关系。

我在实体框架的edmx查看器中创建了这个表,并使用必要的.tt文件通过"从模型生成数据库"将其导出到SQlite。

每当我试图在代码中的表中添加一行时,我总是会收到错误消息:

"操作失败:无法更改关系,因为一个或多个外键属性不可为null。对关系进行更改时,相关的外键属性将设置为null值。如果外键不支持null值,则必须定义新的关系,必须为外键属性分配另一个非null值,或不相关的对象t必须删除。"

我用来添加的测试代码:

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])                     
);

我对这个问题研究了很多,只发现另一个人在添加行而不是删除行时遇到了问题,他们的问题似乎与我的问题不够相似。我还尝试过重新生成数据库。

我回去看了看我改变了的东西。事实证明,在我实现的访问数据库本身的一个分部类中添加一个属性是个问题。将此属性更改为函数解决了问题。我不完全确定这为什么会引起这个问题。我在这些分部类中有其他属性,尽管可能没有尝试访问DB。

最新更新