EF常见问题
程序员文章站
2024-03-21 16:37:28
...
不理解EF机制的小白,有时候遇到视图添加不到模型编辑器中,很是无解,关键是EF编辑器愣是报一些没有用的错误:
模型已生成,但出现警告或错误。
有关详细信息,请参阅错误列表。运行应用程序前需要修复这些问题。
这些问题归根结底可以用Microsoft官网上的一句话来解答:
但是在官网里没有介绍对于视图一些没有表主键的情况,EF生成器是怎么生成模型Key,所以只能自己总结,以下是我总结的三点(可以右键edmx生成器,用xml格式打开模型进行查看):
1.没有主键的单表查询,EF编辑器会默认第一个字段为主键
CREATE VIEW AA AS
SELECT B.Name,B.Mobile FROM [User] B
<!--生成过程中发现错误:
警告 6002: 表/视图“TestDB.dbo.AA”未定义主键。已推断出该键,并将定义创建为只读的表/视图。
-->
<EntityType Name="AA">
<Key>
<PropertyRef Name="Name" />
</Key>
<Property Name="Name" Type="varchar" Nullable="false" MaxLength="50" />
<Property Name="Mobile" Type="varchar" MaxLength="20" />
</EntityType>
2.多表查询,字段中包含主表主键,则使用主表主键,没有则使用主表中的所有字段作为主键
CREATE VIEW [dbo].[V_UserInfo] AS
SELECT
u.Name,
u.Mobile,
f.ExTime,
f.No,
t.A
FROM [User] u
LEFT OUTER JOIN IdCardInfo f ON f.UserId=u.UserId
LEFT OUTER JOIN TableB t ON t.Id=f.Id
<!--生成过程中发现错误:
警告 6002: 表/视图“TestDB.dbo.V_UserInfo”未定义主键。已推断出该键,并将定义创建为只读的表/视图。
-->
<EntityType Name="V_UserInfo">
<Key>
<PropertyRef Name="Name" />
<PropertyRef Name="Mobile" />
</Key>
<Property Type="String" Name="Name" MaxLength="50" />
<Property Type="Int32" Name="Mobile" Nullable="false" />
<Property Type="Int32" Name="ExTime" Nullable="false" />
<Property Type="Int32" Name="No" Nullable="false" />
<Property Type="Int32" Name="A" Nullable="false" />
</EntityType>
3.多表查询+GROUP BY 的视图,默认使用GROUP BY 的字段作为键值
CREATE VIEW [dbo].[V_CountUser] AS
SELECT
f.ExTime,
f.Type,
COUNT(u.UserId) AS UserCount
FROM [User] u
LEFT OUTER JOIN IdCardInfo f ON f.UserId=u.UserId
LEFT OUTER JOIN TableB t ON t.Id=f.Id
GROUP BY F.ExTime,F.Type
<!--生成过程中发现错误:
警告 6002: 表/视图“TestDB.dbo.V_UserInfo”未定义主键。已推断出该键,并将定义创建为只读的表/视图。
<EntityType Name="V_CountUser">
<Key>
<PropertyRef Name="ExTime" />
<PropertyRef Name="Type" />
</Key>
<Property Type="DateTime" Name="ExTime" Precision="3" />
<Property Type="Int32" Name="Type" Nullable="false" />
<Property Type="Int32" Name="UserCount" Nullable="false" />
</EntityType>
上一篇: ubuntu 下载百度网盘文件
推荐阅读
-
EF常见问题
-
CSS及页面常见问题解决方案 css
-
idea 常见问题解决 博客分类: java ideaSystem.getProperty("user.dir")
-
关于MySQL的知识点与面试常见问题都在这里
-
在ubuntu系统下安装lrzsz出现“E: Unable to locate package ...” 博客分类: Linux中常见问题 ubuntu
-
Oracle高并发系列1:DML引起的常见问题及优化思路 oraclemysqlsqlcachemongodb
-
MaxCompute使用常见问题总结 大数据sqlhtml
-
linux "ps -ef|grep" 简写为pg 博客分类: linux linux
-
linux "ps -ef|grep" 简写为pg 博客分类: linux linux
-
Android Studio3.1.2 引入工程常见问题