繁体   English   中英

带有SQL Server CE数据库的实体框架:多对多关系给出了例外,“值不能为null。 参数名称:来源”

[英]Entity Framework with SQL Server CE database: many-to-many relation gives exception “Value cannot be null. Parameter name: source”

我在远程计算机上的SQL Server上创建了一个小型数据库,其中包含几个表,分别称为DocumentFileTag 关系非常简单:文件->文档:一对多,标签->文档:多对多。 因此,我创建了一个名为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM