Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 空表上的System.Data.Linq.DuplicateKeyException_C#_Entity Framework_Linq_Insert - Fatal编程技术网

C# 空表上的System.Data.Linq.DuplicateKeyException

C# 空表上的System.Data.Linq.DuplicateKeyException,c#,entity-framework,linq,insert,C#,Entity Framework,Linq,Insert,我得到这个错误: System.Data.Linq.DuplicateKeyException: Cannot add an entity with a key that is already in use. 当我运行这段代码时,它遍历一个目录并将相关记录放入数据库 public string RefreshClientTable(string username, string companyName) { string company_path = @"M:/" + c

我得到这个错误:

System.Data.Linq.DuplicateKeyException: Cannot add an entity with a key that is already in use.
当我运行这段代码时,它遍历一个目录并将相关记录放入数据库

   public string RefreshClientTable(string username, string companyName) {
        string company_path = @"M:/" + companyName + "/Clients/";
        string info = "";
        ExplorerBAL b = new ExplorerBAL();
        List<Explorer.DirModel> c = b.Explorer(company_path).dirModelList;
        DataContext dbContext = new BaseDataContext();
        var db_company_clients = dbContext.Clients.Where(d => d.co_name == companyName).ToList();
        foreach (var client_name in c) {
            //Determine if client exists
            info = info + "Found: " + client_name.DirName + "\n";
            int client_in_db = dbContext.Clients.Count(f => f.co_name == companyName && f.cl_name == client_name.DirName);
            if (client_in_db == 1) {
                //Update ancillary fields (later)
            }
            else {
                info = info + "Updating: " + client_name.DirName + "\n";
                //Insert the record if non-existant
                Project insert_sql = new Project() {
                    co_name = companyName,
                    cl_name = client_name.DirName
                    //Update ancillary fields (later)
                };
                dbContext.Projects.InsertOnSubmit(insert_sql);
            }
        }

        try {
            dbContext.SubmitChanges();
            return "SUCCESS:\n" + info;
        }
        catch (Exception e) {
            return "ERROR:\n" + info + e.ToString() + "\n";
        }
    }
公共字符串RefreshClientTable(字符串用户名、字符串公司名称){
字符串company_path=@“M:/”+companyName+“/Clients/”;
字符串信息=”;
ExplorerBAL b=新ExplorerBAL();
列表c=b.Explorer(公司路径).dirModelList;
DataContext dbContext=新的BaseDataContext();
var db_company_clients=dbContext.clients.Where(d=>d.co_name==companyName.ToList();
foreach(c中的var客户端名称){
//确定客户端是否存在
info=info+“找到:“+client\u name.DirName+”\n”;
int client_in_db=dbContext.Clients.Count(f=>f.co_name==companyName&&f.cl_name==client_name.DirName);
if(客户端\u in\u db==1){
//更新辅助字段(稍后)
}
否则{
info=info+“正在更新:“+client\u name.DirName+”\n”;
//如果不存在,请插入记录
项目插入\u sql=新项目(){
公司名称=公司名称,
cl_name=客户_name.DirName
//更新辅助字段(稍后)
};
dbContext.Projects.InsertOnSubmit(插入sql);
}
}
试一试{
dbContext.SubmitChanges();
返回“成功:\n”+信息;
}
捕获(例外e){
返回“错误:\n”+info+e.ToString()+“\n”;
}
}
请注意,表是空的,主键是两个varchar字段。根据研究,我怀疑对dbContext的多次调用可能存在某种问题。我怀疑如果我不首先检查项目的存在,它会起作用,但我真的需要这样做


有人知道这个问题吗?有类似的问题,但没有合适的答案。。。然而,插入到表中是一种非常常见的操作,所以肯定有什么特别的错误。

好吧,我讨厌用打字错误解决方案来解决一个长达8小时的问题。但这是:

dbContext.Projects.InsertOnSubmit(insert_sql);
应该是:

dbContext.Clients.InsertOnSubmit(insert_sql);

复制/粘贴错误

嗯,我讨厌用打字错误解决方案解决一个8小时的问题。但这是:

dbContext.Projects.InsertOnSubmit(insert_sql);
应该是:

dbContext.Clients.InsertOnSubmit(insert_sql);

复制/粘贴错误

因为您说
主键是两个varchar字段
您确定在插入之前没有填充其中一个键吗?最好在此处显示表结构。在尝试插入时,如果没有实例化表类/对象、插入具有现有PK值的行或在需要时忘记将PK列声明为自动递增,则会引发异常
DuplicateKeyException
。这不是自动递增问题,因为它不是数字,表是空的,在代码运行时没有添加行,因此它不能是现有的PK(除非以前插入到这个时髦的visual studio dmcl模型中的键仍然在那里,但数据库中没有)。我不确定实例化,所以我尝试重建.dmcl文件(删除所有表,根据需要重新导入和重命名)。没有效果。提交更改时发生错误。更多错误:“System.Data.Linq.ChangeProcessor.TrackUntrackedObjects(元类型,对象项,Dictionary`2 visted)”,因为您说
主键是两个varchar字段
您确定在插入之前没有填充其中一个键吗?最好在此处显示表结构。在尝试插入时,如果没有实例化表类/对象、插入具有现有PK值的行或在需要时忘记将PK列声明为自动递增,则会引发异常
DuplicateKeyException
。这不是自动递增问题,因为它不是数字,表是空的,在代码运行时没有添加行,因此它不能是现有的PK(除非以前插入到这个时髦的visual studio dmcl模型中的键仍然在那里,但数据库中没有)。我不确定实例化,所以我尝试重建.dmcl文件(删除所有表,根据需要重新导入和重命名)。没有效果。提交更改时发生错误。更多错误:“System.Data.Linq.ChangeProcessor.TrackUntrackedObjects(元类型、对象项、字典`2已访问)”