![](/img/trans.png)
[英]EF Core 5 Retrieve database Many-to-Many record 'Value cannot be null. (Parameter 'source')'
[英]Entity Framework with SQL Server CE database: many-to-many relation gives exception “Value cannot be null. Parameter name: source”
我在远程计算机上的SQL Server上创建了一个小型数据库,其中包含几个表,分别称为Document
, File
和Tag
。 关系非常简单:文件->文档:一对多,标签->文档:多对多。 因此,我创建了一个名为document_tag的链接表,用于存储文档和标签ID。
然后,我要求Entity Framework为我创建相应的代码,这产生了两个类。 一切工作正常,除了性能稍慢,所以我决定创建一个.SDF
文件(SQL Server CE数据库),保留与模型对话的代码,然后让Entity Framework重新创建模型。
之后,当我简单地运行以下代码时
var doc = new Document { Name = "Test", Documentdate = new DateTime( 2010, 1, 2 };
var file = new File{ Document = doc, Filename = "test.txt", Scandate = new DateTime( 2010, 1, 3 ) };
var tag1 = new Tag { Name = "test-tag" };
_db.documents.Add(doc);
_db.files.Add(file);
_db.tags.Add(tag1);
_db.SaveChanges();
一切正常,文档,文件和标签已存储。
但是,当我仅添加行以将标签分配给文档时:
var doc = new Document { Name = "Test", Documentdate = new DateTime( 2010, 1, 2 };
var file = new File{ Document = doc, Filename = "test.txt", Scandate = new DateTime( 2010, 1, 3 ) };
var tag1 = new Tag { Name = "test-tag" };
_db.documents.Add(doc);
tag1.Documents.Add(doc);
_db.files.Add(file);
_db.tags.Add(tag1);
_db.SaveChanges();
我例外
值不能为空。 参数名称:来源
在SaveChanges()
调用上。 有人知道我在做什么错吗?
好。 事实证明,我需要在documents_tag表中同时指定文档和标签ID作为主键。 该错误以错误的方式发送给我,但是当我尝试在空解决方案中重新创建场景时,从数据库生成代码时出现此错误:
The table/view 'document_tag' does not have a primary key defined. The key has been inferred and the definition was created as a read-only table/view.
这就是解决方案的线索。 希望它对其他人有帮助。 修改数据库后,您需要重新创建模型。 也许刷新就足够了,我重新创建了所有内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.