Kul*_*han 0 c# sql linq entity-framework asp.net-mvc-4
我正在使用的查询是这样的:
int? UserId = db.StudentModel//the question mark here makes the int nullable
.Where(c => c.UserName == certUserName)
.Select(c => c.UserId)
.First();
Run Code Online (Sandbox Code Playgroud)
不幸的是,这仅在数据库具有主键时才有效.由于数据库的特定结构和使用,不能有主键.即使没有PK,如何修改我的搜索以从数据库中提取完全相同的内容?
编辑:对不起!我应该更加明确.我猜错误本身不在于实际查询,它取决于模型的设置方式:
在模型生成期间检测到一个或多个验证错误:
IronGriffin.Models.CompletionsModel :: EntityType'CompletionsModel'没有定义键.定义此EntityType的键.
完成:EntityType:EntitySet'Completions'基于未定义键的类型'CompletionsModel'.
话虽如此,问题仍然是没有定义主键.我想如果通过搜索主键来搜索不起作用,这将全部起作用(除非它没有?我以为我读到的地方就是它的工作原理)
不幸的是,这仅在数据库具有主键时才有效.由于数据库的特定结构和使用,不能有主键.
两件事:首先,数据库没有主键,表没有.我假设你的意思是你有一个表在数据库中不具有为它定义的主键.
这导致第二:使用实体框架,每个实体必须有一个主键.这是EF的要求,与搜索无关.如果EF看到一个没有密钥的实体,EF甚至都不会试图生成数据库的概念模型,因此搜索变得不可能.
您有两种选择:
找出一种将主键放在桌面上的方法.如果你能够改变你的表定义,那就没有理由不应该有主键.如果没有您可以选择的自然键,请添加代理键,如标识字段.你的钥匙是什么并不重要,它必须保证每一行都是唯一的.它甚至不必只是一个字段:EF支持使用复合键,例如:
modelBuilder.Entity<Foo>.HasKey(e => new { e.Field1, e.Field2 });
不要使用Entity Framework.假设您可以弄清楚如何正确编写查询,SQL Server查询没有主键的数据库表没有问题.您可以随时使用ADO.NET访问您的数据库,您将无法获得EF的任何其他好处.
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |