Entity Framework 无法对没有主键的视图映射实体的解决办法

我们在使用Entity Framework的时候经常会把数据库中的某一个视图映射为EF的实体,但是如果数据库视图中的列没有包含表的主键列,EF会报出警告说视图没有主键,导致映射为实体失败错误如下:

表/视图“{0}”未定义主键,无法推断有效的主键。已排除该表/视图。要使用该实体,您将需要检查架构,添加正确的键并对它取消注释。

English translation: The table/view ‘{0}‘ does not have a primary key defined and no valid primary key could be inferred. This table/view has been excluded. To use the entity you will need to review your schema, add the correct keys and uncomment it.

这时候我们需要在视图里面用sql的isnull函数生成一列不为null的为一列就行了。

比如假设现在我们的数据库中本来有一个视图叫V_Customer,它返回的列中没有包含查询表dbo.CustomersBoughtCarsSurvey的主键列,其Sql脚本如下:

CREATE VIEW [dbo].[V_Customer]
AS
SELECT    Name, Age, Sex, Nation, City
FROM      dbo.CustomersBoughtCarsSurvey

那么这个视图是无法映射为Entity Framework的实体的,现在我们修改视图增加一个自动生成GUID值的列叫ID,并且使用ISNULL函数确保该列值不为空,脚本如下:

CREATE VIEW [dbo].[V_Customer]
AS
SELECT  ISNULL(NEWID(), ‘d1e57ca7-6eee-495a-be13-73d5e7d51f36‘) AS Id, Name, Age, Sex, Nation, City
FROM      dbo.CustomersBoughtCarsSurvey

我们可以看到现在在视图中多了一列id,且是not null的,现在就

时间: 2024-10-09 22:09:14

Entity Framework 无法对没有主键的视图映射实体的解决办法的相关文章

Entity Framework "There is already an open DataReader associated with this 的解决办法

解决办法: 1,修改连接串,加上MultipleActiveResultSets=true 2, 一次性先把数据读出来 var contacts = from c in db.Contact select c; List results = contacts.ToList(); foreach (Contact c in results){ } 提示:contacts.ToList() 的作用是强制加载contact列表,也就是先强制执行查询,再做后续处理. 一定要全部tolist不然上面查询结

Entity Framework 4.1 之八:绕过 EF 查询映射

原文名称:Entity Framework 4.1: Bypassing EF query mapping (8) 原文地址:http://vincentlauzon.wordpress.com/2011/04/21/entity-framework-4-1-bypassing-ef-query-mapping-8/ 看到 Entity Framework 4.1 推荐英文教程,为了帮大家看起来方便一些,简单翻译一下.这是一个系列,共有 8 篇,这是第 8 篇. Entity Framework

组合主键及JPA映射

组合主键 主键最常见的是单字段主键,组合主键使用两个及以上的字段作为主键,常用于多个字段能唯一标示一条记录的表.比如,股票数据表,股票代码.日期和收盘价作为主键.每支股票,在一个特定日期,只能有一个收盘价. 数据库管理系统使用MySQL,创建一个具有组合主键的表Person. CREATE TABLE PERSON ( name VARCHAR(255) NOT NULL, age BIGINT UNSIGNED NOT NULL, adress VARCHAR(255) , PRIMARY K

《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型 (转)

不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创建模型 问题 有一个存在的数据库,它拥有表.也许还有视图.外键.你想通过它来创建一个模型. 解决方案 让我们设想,你拥有一个描述诗人(Poet)以及他们的诗(Poem),还有他们之间关系的数据库.如图2-7所示. 图2-7 一个关于诗人及他们的诗的简单数据库 从上图可以看出,一个诗人可能是一首或多首

Entity Framework Code First执行SQL语句、视图及存储过程

1.Entity Framework Code First查询表或视图 var provincelist = ctx.Provinces.SqlQuery("SELECT TOP 10 * FROM Province"); foreach (var province in provincelist) { Console.WriteLine("{0}-{1}-{2}", province.ProvinceID, province.ProvinceNo, provinc

EF 映射没有主键的视图

在数据库中先把视图建好, 然后在右键视图->编写视图脚本->CREATE->新查询窗口 在光标出添加主键 1 CREATE VIEW [dbo].[V_ShareData] 2 AS 3 SELECT ISNULL(NEWID(), 'd1e57ca7-6eee-495a-be13-73d5e7d51f36') AS Id,dbo.ShareData.*, dbo.Tag.TagName, dbo.[User].UserName 4 FROM dbo.Tag INNER JOIN 5 d

SQL Server导入导出不丢主键和视图的方法

SQL Server导入导出 SQL Server 导入导出 工具/原料 使用Microsoft SQL Server Management Studio 导入导出数据. 直接使用Microsoft SQL Server Management Studio 导入导出数据会丢失主键.视图等等. 正确的保存方法如下: 一.选择本地的需要导出的数据库 右键-->任务-->生成脚本. 按向导选择需要导出的数据库下一步到“选择脚本选项” 选择需要生成的类型,注意“为服务器版本编写脚本”处选择对应的脚本.

重写dispatchKeyEvent方法 按返回键back 执行两次的解决办法

重写dispatchKeyEvent方法 按返回键back 执行两次的解决方法 @Override   public boolean dispatchKeyEvent(KeyEvent event) {           if(event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() != KeyEvent.ACTION_UP) {//不响应按键抬起时的动作                //TODO 代码    

secureCRT使用退格键(backspace)出现^H解决办法

刚新装了python-3.4.1,使用secureCRT连接上去,但是我在进入后,输入回格键时,屏幕显示的是^H,这个让人受不了.终于在网上找到了解决办法,只要修改一下secureCRT的配置即可.如下图: 选项--->会话选项---> 把下面两个打个钩就行了.