2010-07-20 134 views
1

我不知道为什么它是SaveChanges()上的错误,我在谷歌搜索,一些身体说使用EF,数据库的表有这样的主键,我有这个,但仍然错误。错误消息不够清楚,它只是抛出System.Data.UpdateException。 守则:插入.NET 4.0实体框架错误?

public static void AddAccount(int _acc_id,string _name) 
{ 
    dataEntities de = new dataEntities(GetEntityConn()); 
    account acc = new account 
    { 
     account_id = _acc_id, 
     name = _name 
    }; 
    de.AddObject("account", acc); 
    de.SaveChanges(); 
} 
+2

异常的消息是什么? – adriaanp 2010-07-20 14:23:48

+0

它只是一行:无法更新EntitySet。 :( – Cheung 2010-07-20 14:46:51

+0

添加您的解决方案作为答案,并将其标记为“关闭”此问题,并将其作为其他人的参考:) – 2010-07-20 21:46:05

回答

0

我的精神力量告诉我,ACCOUNT_ID领域上有和_acc_id的值已经在表中的唯一约束。

如果我强大的心灵能力是错误​​的,那么需要更多的信息。 8)

+0

该表有2列,account_id和名称,我已删除account_id = acc_id现在,account_id是自动增量,因为我读过(SQL CE与EF4一起使用时,不支持自动生成的主键:http://social.msdn.microsoft.com/forums/en-US/sqlce/thread/48984bd4-0921-4637-bd8f-8aa1ae9514ab /) 现在我只是插入名字,但仍然不起作用:( – Cheung 2010-07-20 14:39:09

+0

也许使用存储过程来做传入的只是名字并使用EF来调用存储过程?这可能是一个很好的实现 – Task 2010-07-20 15:32:00

0

猜测EntitySetName没有被称为帐户,但很难说,没有更多的信息。

我会做的是一样的东西:

public static void AddAccount(int _acc_id,string _name) 
{ 
    dataEntities de = new dataEntities(GetEntityConn()); 
    account acc = new account 
    { 
     account_id = _acc_id, 
     name = _name 
    }; 
    de.Accounts.Add(acc); 
    de.SaveChanges(); 
} 

这摆脱了字符串值,所以它也将有助于重构

+0

我打开* .edmx来看,实体集名称真的是“账号”:( 但是,并没有“添加”方法,这里的屏幕截图为 http:///www.img xc.com/fullimage/qNzIWp.png – Cheung 2010-07-20 14:43:47

+0

它不是AccountSet? – Jeroen 2010-07-20 15:04:07

+0

'de.account'是什么类型? – 2010-07-20 21:45:10

0

更新: 我曾尝试上创建一个相同的表SQL Server 2008,从中生成edmx文件,并使用相同的代码插入,它的工作原理!所以我相信SQLCE所有关于EF 4.0 .... 我上传的窗口形式的测试项目,具有SQLCE数据库,并用一个按钮事件,你可以下载

http://www.netfrd.com/testproject.zip

代码很简单,但它真的不起作用。