Oracle + Entity Framework 更新没有设置主键的表
最近用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 更新没有设置主键的表的更多相关文章
- Entity Framework 无法对没有主键的视图映射实体的解决办法
我们在使用Entity Framework的时候经常会把数据库中的某一个视图映射为EF的实体,但是如果数据库视图中的列没有包含表的主键列,EF会报出警告说视图没有主键,导致视图映射为实体失败,错误如下 ...
- Entity Framework 插入数据 解决主键非自增问题
http://blog.csdn.net/educast/article/details/8632806 与Entity Framework相伴的日子痛并快乐着.今天和大家分享一下一个快乐,两个痛苦. ...
- Entity Framework Code First 遭遇主键自动生成问题
4.0后就没有去跟踪后面的版本了.现在直接开始用5.0没想到在做User的GURD时就遭遇insert不进数据问题. ISet<User>.Add(user);_context.SaveC ...
- php+mysql 除了设置主键防止表单提交内容重复外的另一种方法
感觉好久没有更新博客了,一直在做网站及后台,也没有遇到让我觉得可以整理的内容,之前做的一个系统,已经完成了,后来客户又要求加一个功能,大概就是表单提交的时候,约束有一项不能和以前的内容重复,如图 比如 ...
- 关于oracle设置主键自增的问题
关于orcale设置主键自增的问题 关于主键Oracle中并没有提供一个直接的语句设置,对于这个oralce一般都是用序列和触发器来实现 一下又两种方法来实现 一 ,不使用触发器 创建序列: crea ...
- oracle中如何设置主键并且让其自动增长
由于oracle中是没有自动增长的的,需要自己去进行写触发器等方式去进行设置: 找了一下他人写的,有两种方法可以设置主键,一种是自增长主键,另一种就是生成唯一序列. 一.自增长主键 我创建一个用户的信 ...
- Oracle 设置主键自增长__Oracle
转自:https://yq.aliyun.com/ziliao/258074 如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现.不过对于这个数据库的 ...
- 在Oracle中设置主键自增
转自:https://www.2cto.com/database/201705/636725.html 数据库设置主键自增">oracle数据库设置主键自增: --创建表 create ...
- Oracle 设置主键自增长
如果想在Oracle数据库里实现数据表主键自增,我们似乎没有办法像MySql般直接定义列的属性来实现.不过对于这个数据库的常用功能,我们还是有办法实现的.这里将展示使用触发器来实现主键自增. 1.准备 ...
随机推荐
- java中匿名类的讲解
匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象 ...
- apacheserver下载、安装、配置
1.下载 下载地址:apache下载地址 点击左側"Download"下的链接,打开例如以下页面 这里能够选择版本号.我选择2.4.16.单击"2.4.16" ...
- Windows 窗体的.Net 框架绘图技术
当编写一个典型的Windows 窗体程序时,窗体和控件的绘制.效果等操作是不需要特别加以考虑的.这是为什么呢?因为通过使用 .Net 框架,开发人员可以拖动一系列的控件到窗体上,并书写一些简单的与事件 ...
- C#实现汉字转换为拼音缩写的代码
using System; using System.Configuration; using System.Data; using System.Web; using System.Web.Secu ...
- 杭电 2034 人见人爱A-B
http://acm.hdu.edu.cn/showproblem.php?pid=2034 人见人爱A-B Time Limit: 2000/1000 MS (Java/Others) Mem ...
- git 提交远程
一.从远程克隆项目,修改后提交 1.先切换要放项目的本地目录 C:\Users\chendd>cd E:\web C:\Users\chendd>e: 2.根据服务器的git地址克隆到本地 ...
- Online Schema Upgrade in MySQL Galera Cluster using TOI Method
http://severalnines.com/blog/online-schema-upgrade-mysql-galera-cluster-using-toi-method As a fo ...
- 关于NuDaqPci 数据采集
最近在做公司一个fct的测试及调试软件 设计到的比较多的通信问题 1,Gpib通信(调用ADL-GPIB) 2,串口通信 3,Usb通信(调用USBXpress) 4,Pci通信(调用PCIS-DAS ...
- mysql 批量插入数据过多的解决方法
使用场景: 测试时需要插入100w的数据,跑sql脚本插入非常慢. 存储过程如下: //DELIMITER DROP PROCEDURE if EXISTS createAmountCount; cr ...
- dl-ssl.google.com
转载:http://jingyan.baidu.com/article/64d05a02752300de55f73b99.html 搭建Android就会用到Android SDK,而安装SDK有个恶 ...