linq - вставка новых данных заменяет существующие данные в database.why? - PullRequest
0 голосов
/ 17 декабря 2009

Когда я вызываю datacontextInstance.Insertonsubmit () и datacontextinstance.submitChanges (), он очищает все существующие данные в базе данных перед вставкой новых данных.

Как мне выполнить реальную операцию вставки?

Я хочу добавить новые данные в существующую таблицу без очистки существующих данных.

Спасибо

Edit:

Вот мой тестовый код, который я попробовал ...

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 ]

1 голос
/ 17 декабря 2009

Можете ли вы просто опубликовать свой метод вставки? Я думаю, что проблема с вашим кодом не VS2010.

1 голос
/ 27 декабря 2009

Я предполагаю, что id - это ключ в базе данных, но он не генерируется автоматически. поэтому, когда вы создаете свои новые сущности и назначаете им ключи, которые уже существуют в записях db - db, они просто заменяются новыми.

1 голос
/ 17 декабря 2009

Если вы также не извлекли все данные и не вызвали DeleteOnSubmit для каждого из извлеченных элементов, не следует удалять какие-либо данные при выполнении InsertOnSubmit. Вставляемые элементы приводят к тому, что операторы вставки SQL генерируются при вызове SubmitChanges. Единственный известный мне способ получения оператора delete - это вызвать DeleteOnSubmit. Возможно, вы думаете, что вам нужно удалить элементы из таблицы перед вызовом отправки изменений, чтобы уменьшить объем данных, отправляемых обратно на сервер. Это не правильно. Только новые или измененные данные будут отправлены обратно - и вызов DeleteOnSubmit приведет к удалению данных при вызове SubmitChanges.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...