实体框架 - GetObjectByKey 不允许主键
我正在尝试使用 GetObjectByKey 函数获取记录,如下所示:
Enumerable<KeyValuePair<string, object>> entityKeyValues =
new KeyValuePair<string, object>[] {
new KeyValuePair<string, object>("JournalId",
new Guid("6491305f-91d9-4002-8c47-8ad1a870cb11")) };
EntityKey key = new System.Data.EntityKey(string.Format("{0}.{1}", ObjectContextManager.Current.DefaultContainerName, "Journal"), entityKeyValues);
但我收到此异常
System.ArgumentException:提供的键值对列表 包含的条目数量不正确。有54个关键字段 在类型“Namespace.Journal”上定义,但提供了 1 个。范围 名称:密钥
类型 Journal 是一个视图。
我怎样才能仅使用一个字段来使用该函数,我需要它的原因是因为我不想指定一种通用类型,而只是从给定的实体集名称中获取它。
提前致谢
I'm trying to get a record using GetObjectByKey function like this:
Enumerable<KeyValuePair<string, object>> entityKeyValues =
new KeyValuePair<string, object>[] {
new KeyValuePair<string, object>("JournalId",
new Guid("6491305f-91d9-4002-8c47-8ad1a870cb11")) };
EntityKey key = new System.Data.EntityKey(string.Format("{0}.{1}", ObjectContextManager.Current.DefaultContainerName, "Journal"), entityKeyValues);
But i get this exception
System.ArgumentException: The provided list of key-value pairs
contains an incorrect number of entries. There are 54 key fields
defined on type 'Namespace.Journal', but 1 were provided. Parameter
name: key
The type Journal is a view.
How can i do to use that function with just one field, the reason why i need that is because i don't want to specify a generic type , just one to get it from the given entity set name.
Thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
数据库中的视图没有键,但 EF 需要它,因此当您将视图插入模型时,EF 将采用所有不可为空、非二进制列并将它们定义为键 - 目前您的键由 54 列组成。解决方案是手动修改 EDMX 文件(作为 XML),但使用默认的 EDMX 设计器,每次更新数据库后您的更改都会被删除。
View in database doesn't have a key but EF needs it so when you insert the view to the model EF will take all non-nullable, non-binary columns and defines them as a key - at the moment your key consists of 54 columns. The solution is manually modifying EDMX file (as XML) but with default EDMX designer your changes will be deleted after each update from database.