1

我在远程计算机上的 SQL Server 上创建了一个小型数据库,其中包含几个表,Document称为FileTag。关系很简单:文件->文档:一对多,标签->文档:多对多。因此,我创建了一个名为 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()通话中。有谁知道我在这里做错了什么?

4

1 回答 1

0

好的。事实证明,我需要将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.

这就是这个解决方案的线索。希望它可以帮助其他人。修改数据库后需要重新创建模型。也许刷新就足够了,我重新创造了一切。

于 2013-07-21T11:59:46.493 回答