Вопрос по linq-to-sql, sql-server, c# – InsertAllOnSubmit вставляет только первую запись данных

5

Я заметил странное поведение в моей службе импорта сегодня, когда я пытался импортировать несколько записей данных.

Когда я делаю это следующим образом, все записи данных импортируются, и автоматически увеличивается значение (смотреть скриншот):

public void Create(List<Property> properties)
{
    foreach (Property prop in properties) {
        dbc.Property.InsertOnSubmit(prop);
        dbc.SubmitChanges();
    }
}

Когда я пытаюсь сделать это таким образом, только первая запись данных получает правильное значение с автоинкрементом (смотреть скриншот):

foreach (Property prop in properties) {
    dbc.Property.InsertOnSubmit(prop);
}
dbc.SubmitChanges();

Тоже самое:

dbc.Property.InsertAllOnSubmit(properties);
dbc.SubmitChanges();

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

[EDIT] Добавлены два скриншота.

Как примечание: вы уверены, что это dbc.Property, а не dbc.Properties? LINQ to SQL обычно множит имена коллекций ... BFree
Да, это "собственность". Я сам назвал таблицы, они не были сгенерированы автоматически или что-то в этом роде. Кроме того, если бы он назывался «Свойства», то первый пример также не должен работать, не так ли? Michael Klement
Кажется, что люди согласны, это проблема, но никто не +1? Ну, я начну. Похоже, это может быть ошибкой для меня. MattH

Ваш Ответ

5   ответов
0

Просто используйте это идеальное решение.
Как, у нас есть новый объект, как & quot; TestTable & quot ;.
Инициализируйте этот объект внутри цикла for как

TestTable objTable = new TestTable ();

И добавить элементы сущности, а также в объект списка List<TestTable> в течение цикла.
И двигатьсяInsertAllOnSubmit() вне цикла for, и нет, он будет работать.

2

Не совсем понятно, почему 2-й вариант не работает, однако не должен быть последним:

dbc.Property.InsertallOnSubmit(properties);
dbc.SubmitChanges();

Edit

Для второго цикла попробуйте:

foreach (Property prop in properties) 
{   
    var newProp = new Property();
    newProp = prop;
    dbc.Property.InsertOnSubmit(newProp);
}
dbc.SubmitChanges();

Для последнего решения попробуйте:

dbc.Property.InsertAllOnSubmit(properties.ToList());
dbc.SubmitChanges();
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Michael Klement
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Michael Klement
Error: User Rate Limit Exceeded Michael Klement
1

Я столкнулся с этой проблемой несколько минут назад.

Моя проблема заключалась в том, что список, который я отправилInsertAllOnSubmit<mappedClass>() был полон объектов, которые возникли из одного экземпляраmappedClass, Я изменял элементы в зависимости от экземпляра модели представления, которую я хотел добавить в базу данных, а затем повторно добавлял экземпляр в список.

Похоже, ошибка новичка, но это может быть что-то, чтобы проверить, если у кого-то все еще есть эта проблема!

6

У меня была та же проблема, и оказалось, что проблема была из-за переопределения Equals в сопоставленном классе. Мой метод Equals сравнивал только поле первичного ключа, которое было полем идентификации. Конечно, когда объекты новые, все тождества равны 0. Поэтому, когда вызывался InsertAllOnSubmit, он думал, что все новые объекты были одинаковыми, и в основном игнорировал все, кроме первого.

1

Поскольку у других пользователей такое же странное поведение, я сообщил о проблеме как об ошибке в Microsoft:

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=483711

Error: User Rate Limit Exceeded Michael Klement

Похожие вопросы