首页 新闻 会员 周边

entity framework 删除从表数据

1
[已解决问题] 解决于 2013-06-06 20:26

表结构:

CREATE TABLE [dbo].[T_USER]

(
[CID] [char](36) NOT NULL,
[NAME] [varchar](50) NULL,
[DPT_CID] [char](36) NOT NULL    //部门表外键

)

删除数据的代码:

//CID是T_User的主键,PK是传过来的参数

T_USER efEntity = new T_USER() { CID = PK };
Db.T_USER.Attach(efEntity);

//这句报错(未将对象引用设置到对象的实例)

Db.T_USER.DeleteObject(efEntity);
Db.SaveChanges();

 

为毛不能直接根据主键删除呢

多啦A梦的弟弟的主页 多啦A梦的弟弟 | 初学一级 | 园豆:46
提问于:2012-04-18 11:23
< >
分享
最佳答案
0

你试试通过主键查询后再删除

奖励园豆:5
dudu | 高人七级 |园豆:30994 | 2012-04-18 13:25

我勒个擦,村长亲自回复啊~~受精中

先查询再删除肯定是可以的,但是这样先查出来然后再删除,是不是有性能上影响

多啦A梦的弟弟 | 园豆:46 (初学一级) | 2012-04-18 13:42

@多啦A梦的弟弟: 

你用的是哪个版本的EF?

试试:

Db.Attach(efEntity);
Db.DeleteObject(efEntity);
Db.SaveChanges();
dudu | 园豆:30994 (高人七级) | 2012-04-18 13:54

@dudu: 我用的是vs2010+sp1自带的entity framework,用你写的代码也是不行,在Db.Attach(efEntity)这句话出错,错误信息:无法将具有 null EntityKey 值的对象附加到对象上下文,我猜还是外键的问题,经过我的测试,外键只要不是null就可以正确删除,EF的删除这样有点别扭的感觉

多啦A梦的弟弟 | 园豆:46 (初学一级) | 2012-04-18 15:30
其他回答(1)
0

唉,小弟, 错误信息:无法将具有 null EntityKey 值的对象附加到对象上下文,这句话的明显意思就是你的主键是null, 你怎么又扯到外键去了。Db是ObjectContext吧。建议不要用ObjectContext, 直接用DbContext。 

ChatinCode | 园豆:2272 (老鸟四级) | 2012-04-20 08:22

主键不是null,我调试的时候已经想到这点了,确实是因为外键的问题,你可以自己建表试试,为什么不要用objectcontext,我是用的database first,vs自动生成的代码

支持(0) 反对(0) 多啦A梦的弟弟 | 园豆:46 (初学一级) | 2012-04-20 08:45

@多啦A梦的弟弟: 我只用DbContext, Code First。你试试用过DbContext 之后,就会扔掉ObjectContext了。其他的我不会。自动生成的代码,如果没有搞懂,我是不敢用的。你有外键的情况下,删除的数据正确吗? 能不能检查一下生成的sql语句,我用DbContext没问题的。

支持(0) 反对(0) ChatinCode | 园豆:2272 (老鸟四级) | 2012-04-20 08:55

@ChatinCode: 因为我们做的东西需要支持ORACLE,但是ORACLE的官方提供程序不支持code first,所以我只能用database first,他自动生成的代码也就是一些实体类,DbConetxt也是继承与ObjectContext的吧

支持(0) 反对(0) 多啦A梦的弟弟 | 园豆:46 (初学一级) | 2012-04-24 13:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册