最近用Entity Framework 开发的时候,发现一个问题,在默认情况下,EF不能对一个没有主键的表进行更新、插入和删除的动作。

那么,应该怎么处理没有主键的表呢?

我们打开这个表的edmx文件,可以看到以下的xml片段

<EntitySet Name="REP" EntityType="Model.Store.REP" store:Type="Tables" store:Schema="FOREST" store:Name="REP">
<DefiningQuery>SELECT
"REP"."ZONE" AS "ZONE",
"REP"."NO" AS "NO",
"REP"."HELP_NO" AS "HELP_NO",
"REP"."NO_TYPE" AS "NO_TYPE",
"REP"."ID_NO" AS "ID_NO",
"REP"."NAME" AS "NAME",
"REP"."TEL" AS "TEL",
"REP"."MAIL_NO" AS "MAIL_NO",
"REP"."ADDRESS1" AS "ADDRESS1",
"REP"."ADDRESS2" AS "ADDRESS2",
"REP"."JOINDATE" AS "JOINDATE",
"REP"."ELITE_D" AS "ELITE_D",
"REP"."PD1" AS "PD1",
"REP"."CUR_CPS" AS "CUR_CPS",
"REP"."PREV_CPS1" AS "PREV_CPS1",
"REP"."YEAR_CPS" AS "YEAR_CPS",
"REP"."IA_CPS" AS "IA_CPS",
"REP"."PREV_BAL" AS "PREV_BAL",
"REP"."CUR_BAL" AS "CUR_BAL",
"REP"."ELITE" AS "ELITE",
"REP"."CUR_CAMP" AS "CUR_CAMP",
"REP"."SALES" AS "SALES",
"REP"."RETURN" AS "RETURN",
"REP"."NO_ACT" AS "NO_ACT",
"REP"."PD_NO" AS "PD_NO",
"REP"."CUR_ORDER" AS "CUR_ORDER",
"REP"."BIRTHDAY" AS "BIRTHDAY",
"REP"."RNAM" AS "RNAM",
"REP"."POST_YN" AS "POST_YN",
"REP"."CARD_NO" AS "CARD_NO",
"REP"."CARD_YYYYMM" AS "CARD_YYYYMM",
"REP"."TEL2" AS "TEL2",
"REP"."MOBILE" AS "MOBILE",
"REP"."EMAIL" AS "EMAIL",
"REP"."PREV_CPS2" AS "PREV_CPS2",
"REP"."SEMAIL" AS "SEMAIL",
"REP"."PASSWORD" AS "PASSWORD",
"REP"."NEXT_CPS" AS "NEXT_CPS",
"REP"."TRAN_D" AS "TRAN_D",
"REP"."PASS_CNT" AS "PASS_CNT",
"REP"."ORDER_CT" AS "ORDER_CT",
"REP"."ORDER_AT" AS "ORDER_AT",
"REP"."SNAME" AS "SNAME",
"REP"."NOTES1" AS "NOTES1",
"REP"."NOTES2" AS "NOTES2",
"REP"."PPWD" AS "PPWD",
"REP"."SALES6" AS "SALES6",
"REP"."NO5" AS "NO5",
"REP"."SALES4" AS "SALES4",
"REP"."DELIVER" AS "DELIVER",
"REP"."ISWHWB" AS "ISWHWB",
"REP"."LOS" AS "LOS",
"REP"."CREDITLINE" AS "CREDITLINE",
"REP"."OCCUPATION" AS "OCCUPATION",
"REP"."ENTRYLOCATION" AS "ENTRYLOCATION",
"REP"."SOURCE" AS "SOURCE",
"REP"."SURVEYTAG" AS "SURVEYTAG",
"REP"."HMDATE" AS "HMDATE",
"REP"."ISRCVSMS" AS "ISRCVSMS",
"REP"."PAYMETHOD" AS "PAYMETHOD",
"REP"."ISPBAMCOURSE" AS "ISPBAMCOURSE",
"REP"."ISBSDCOURSE" AS "ISBSDCOURSE",
"REP"."BSADATE" AS "BSADATE",
"REP"."CUR_NETSALES" AS "CUR_NETSALES",
"REP"."WEBPCDATE" AS "WEBPCDATE",
"REP"."WEBPC" AS "WEBPC",
"REP"."ISMCNOTICE" AS "ISMCNOTICE",
"REP"."OLDNO" AS "OLDNO",
"REP"."EMAILACCOUNT" AS "EMAILACCOUNT",
"REP"."MCDATE" AS "MCDATE",
"REP"."PASS_CRTDATE" AS "PASS_CRTDATE",
"REP"."STARXNO" AS "STARXNO",
"REP"."ZONEID" AS "ZONEID",
"REP"."ORDER_INFO" AS "ORDER_INFO",
"REP"."TRAN_D_EC_DATE" AS "TRAN_D_EC_DATE",
"REP"."REALTITLEID" AS "REALTITLEID",
"REP"."PAIDTITLEID" AS "PAIDTITLEID",
"REP"."PUBLICTITLEID" AS "PUBLICTITLEID",
"REP"."ISASLF" AS "ISASLF",
"REP"."ASLFROSTARTCAMP" AS "ASLFROSTARTCAMP",
"REP"."ASLFROENDCAMP" AS "ASLFROENDCAMP",
"REP"."ISVIRTUALID" AS "ISVIRTUALID",
"REP"."ASLFSPONSORID" AS "ASLFSPONSORID",
"REP"."MPCACTCPS" AS "MPCACTCPS",
"REP"."MPCORDVAL" AS "MPCORDVAL",
"REP"."ASLFCDBENDCAMP" AS "ASLFCDBENDCAMP",
"REP"."ASLFSTARTCAMP" AS "ASLFSTARTCAMP",
"REP"."ISDRCERT" AS "ISDRCERT",
"REP"."DRCERTSTARTCAMP" AS "DRCERTSTARTCAMP",
"REP"."DRCERTENDCAMP" AS "DRCERTENDCAMP",
"REP"."DRFOUSECAMP" AS "DRFOUSECAMP",
"REP"."MAIL_NO1" AS "MAIL_NO1",
"REP"."ADDRESS12" AS "ADDRESS12",
"REP"."ADDRESS22" AS "ADDRESS22",
"REP"."RECOMMENDERID" AS "RECOMMENDERID",
"REP"."RECOMMENDERNAME" AS "RECOMMENDERNAME",
"REP"."RECOMMENDERNATIONALID" AS "RECOMMENDERNATIONALID",
"REP"."COAPPLICANTNAME" AS "COAPPLICANTNAME",
"REP"."COMPANYNAME" AS "COMPANYNAME",
"REP"."ISEINVOICE" AS "ISEINVOICE",
"REP"."ISDONATE_INVOICE" AS "ISDONATE_INVOICE",
"REP"."DRM_CREATEDDATE" AS "DRM_CREATEDDATE"
FROM "FOREST"."REP" "REP"</DefiningQuery>
</EntitySet>

我再加入一个有主键的表进行对比,可以看到有主键的表的定义如下。

<EntitySet Name="City" EntityType="Model.Store.City" store:Type="Tables" Schema="FOREST" />

我们把没有主键的<EntitySet>照着上面这个节点进行更改:删除<DefiningQuery>节点,将store:Schema=”FOREST”更改为Schema=”FOREST”。这样我们就可以对之前没有设置主键的表进行更新、删除以及插入操作了。

无主键的表SSDL定义其实更像是视图,我有一点不明的是store:这个命名空间的作用是什么,为什么只是删除<DefiningQuery>不行,还需要将Schema属性的store命名空间删除才可以。以上都是我还不明白的地方,只是作为一个解决方案,它确实简单可行。

Oracle + Entity Framework 更新没有设置主键的表的更多相关文章

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

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

  2. Entity Framework 插入数据 解决主键非自增问题

    http://blog.csdn.net/educast/article/details/8632806 与Entity Framework相伴的日子痛并快乐着.今天和大家分享一下一个快乐,两个痛苦. ...

  3. Entity Framework Code First 遭遇主键自动生成问题

    4.0后就没有去跟踪后面的版本了.现在直接开始用5.0没想到在做User的GURD时就遭遇insert不进数据问题. ISet<User>.Add(user);_context.SaveC ...

  4. php+mysql 除了设置主键防止表单提交内容重复外的另一种方法

    感觉好久没有更新博客了,一直在做网站及后台,也没有遇到让我觉得可以整理的内容,之前做的一个系统,已经完成了,后来客户又要求加一个功能,大概就是表单提交的时候,约束有一项不能和以前的内容重复,如图 比如 ...

  5. 关于oracle设置主键自增的问题

    关于orcale设置主键自增的问题 关于主键Oracle中并没有提供一个直接的语句设置,对于这个oralce一般都是用序列和触发器来实现 一下又两种方法来实现 一 ,不使用触发器 创建序列: crea ...

  6. oracle中如何设置主键并且让其自动增长

    由于oracle中是没有自动增长的的,需要自己去进行写触发器等方式去进行设置: 找了一下他人写的,有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列. 一.自增长主键 我创建一个用户的信 ...

  7. Oracle 设置主键自增长__Oracle

    转自:https://yq.aliyun.com/ziliao/258074 如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现.不过对于这个数据库的 ...

  8. 在Oracle中设置主键自增

    转自:https://www.2cto.com/database/201705/636725.html 数据库设置主键自增">oracle数据库设置主键自增: --创建表 create ...

  9. Oracle 设置主键自增长

    如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现.不过对于这个数据库的常用功能,我们还是有办法实现的.这里将展示使用触发器来实现主键自增. 1.准备 ...

随机推荐

  1. 图像切割之(五)活动轮廓模型之Snake模型简单介绍

    图像切割之(五)活动轮廓模型之Snake模型简单介绍 zouxy09@qq.com http://blog.csdn.net/zouxy09 在"图像切割之(一)概述"中咱们简单了 ...

  2. Android - FrameLayout覆盖顺序

    FrameLayout覆盖顺序 本文地址: http://blog.csdn.net/caroline_wendy FrameLayout: Child views are drawn in a st ...

  3. 架构师之路(39)---IoC框架

    1 IoC理论的背景     我们都知道,在採用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,全部的对象通过彼此的合作,终于实现系统的业务逻辑.   图1:软件系统中耦合的对象 假设 ...

  4. git 提交远程

    一.从远程克隆项目,修改后提交 1.先切换要放项目的本地目录 C:\Users\chendd>cd E:\web C:\Users\chendd>e: 2.根据服务器的git地址克隆到本地 ...

  5. 修复 MySQL 数据库结构错误 – mysql_upgrade升级

    http://www.cnblogs.com/wjoyxt/p/5477072.html 不知道是不是每次更新 MySQL 软件之后都需要执行数据库升级指令?在我进行过的几次软件升级之后,总会在 My ...

  6. Jquery 表格固定表头

    网上找了好多现成的.结果没一个能成.只得自己动手. (function($){ $.fn.fixHeader = { init : function(obj){ var p = obj.parent( ...

  7. focuskye 学习及下载

    学习:http://www.focusky.com.cn/tutorials/ 下载:http://www.focusky.com.cn/download/

  8. Redis 脚本

    Redis 脚本使用 Lua 解释器来执行脚本. Reids 2.6 版本通过内嵌支持 Lua 环境.执行脚本的常用命令为 EVAL. 语法 Eval 命令的基本语法如下: redis 127.0.0 ...

  9. Google Code Jam 2009, Round 1C C. Bribe the Prisoners (记忆化dp)

    Problem In a kingdom there are prison cells (numbered 1 to P) built to form a straight line segment. ...

  10. c# 操作word

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...