linq - 插入新数据取代了数据库中的现有数据。为什么?

时间:2009-12-17 03:19:53

标签: c# linq-to-sql visual-studio-2010

当我调用datacontextInstance.Insertonsubmit()和datacontextinstance.submitChanges()时,它会在插入新数据之前清除数据库中的所有现有数据。

如何执行真正的插入操作?

我想在不清除现有数据的情况下将新数据添加到现有表中。

由于

编辑:

这是我试过的测试代码......

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {

            DataClasses1DataContext entities = new DataClasses1DataContext();
            for (int i = 1; i <= 100; i++)
            {
                textdata dt = new textdata();
                dt.id = i;
                dt.ipaddress = "172.168.3.2";
                dt.pcname = "testusr";
                dt.publicip = "test pub ip";
                dt.username = "testusr";
                dt.textdata1 = "Some DATA";
                dt.dttime = DateTime.Now;
                entities.textdatas.InsertOnSubmit(dt);
                entities.SubmitChanges(System.Data.Linq.ConflictMode.ContinueOnConflict);
            }
            foreach (textdata dtdata in entities.textdatas)
            {
                Console.WriteLine(dtdata.dttime.Value.ToString());

            }
            Console.ReadLine();


        }
    }
}

在运行我的应用程序之前,我确实将循环从100更改为200,300到400等。但是,新记录出现在数据库中,旧记录也不见了。

再次编辑:

这是我的App.Config ......

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="ConsoleApplication2.Properties.Settings.Database1ConnectionString"
            connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

3 个答案:

答案 0 :(得分:1)

除非您还检索了所有数据并为每个检索到的元素调用了DeleteOnSubmit,否则在执行InsertOnSubmit时不应删除任何数据。插入的项导致在调用SubmitChanges时生成SQL插入语句。我知道获取删除语句的唯一方法是调用DeleteOnSubmit。也许,您认为在调用提交更改之前需要从表中删除项目以减少推回服务器的数据量。这是不正确的。只会发送新的或更改的数据 - 调用SubmitOnSubmit将强制在调用SubmitChanges时删除数据。

答案 1 :(得分:1)

您可以发布插入方法吗?我认为问题来自你的代码而不是VS2010。

答案 2 :(得分:1)

我的猜测是id是数据库中的密钥,但它不是自动生成的。 因此,当您创建新实体并为它们分配已存在于db-db条目中的键时,只能被新实体覆盖。