我有一个linq2sql设置,其中对象从客户端发送(通过flourinefx flex)并将它们附加到新的datacontext,如下所示:
我还有一个在整个会话中使用的"全局"datacontext.
public static void Update(Enquiry enquiry)
{
OffertaDataContext db = new OffertaDataContext();
db.Enquiries.Attach(enquiry);
db.Refresh(RefreshMode.KeepCurrentValues, enquiry);
db.SubmitChanges();
}
Run Code Online (Sandbox Code Playgroud)
这种方法通常工作正常,但过了一段时间我得到错误"无法添加一个已经在使用的密钥的实体".
我认为如果你已经加载了Attach
一个实体,就会发生这个错误DataContext
.
导致错误的代码与您在此处显示的完全相同?创建新的后OffertaDataContext
你在查询之前的任何内容Attach
吗?
这可能不是你的问题(我不知道),但这是我的问题,当人们用谷歌搜索时,它可能会帮助其他人。如果您没有使用内置的 Linq-to-SQL 设计器或 SQLMetal 的东西来生成您的 Linq-to-SQL 类,或者如果您忘记将 ID 列设为 IDENTITY,则您可能缺少列上的属性名为“IsDbGenerated”的属性。确保您的列属性如下所示:
<Column(Name:="ID", DbType:="Int NOT NULL IDENTITY", CanBeNull:=False, IsPrimaryKey:=True, IsDbGenerated:=True)>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
37729 次 |
最近记录: |