Лучший способ обновить в Linq К SQL

Мне пришлось установить «Уровень оптимизации» в «Swift Compiler - Generation Code» на «Release» - «No Optimization [-Onone]» из «Optimize for speed», чтобы заставить Cache передавать архив.

То же самое с SwiftyBeaver

Кажется, проблема связана с Xcode 10.2. Кроме того, другие проекты с пакетом, похоже, подходят для оптимизации, такие как Toucan или XCGLogger.

6
задан Mihai Limbășan 22 March 2009 в 16:55
поделиться

5 ответов

Я думаю, что понятие редактирования записи отличается от удаления и вставки новой. В основном я думаю, что ORM должен абстрагировать далеко поколение первичного ключа и другой связанный материал. Путем удаления и вставки, Вы могли бы удалять целостность записи (вероятно, издание нового первичного ключа, делая объекты, на которые ссылаются, недопустимыми и т.д...). Я предлагаю обновить запись каждый раз, когда меры, которые Вы принимаете, являются концептуально обновлением.

2
ответ дан 17 December 2019 в 04:52
поделиться

Можно рассмотреть использование автокартопостроителя для копирования значений для Вас. Проверьте это на большее количество информации: http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/01/22/automapper-the-object-object-mapper.aspx

1
ответ дан 17 December 2019 в 04:52
поделиться

Я думаю, что Вы могли использовать что-то как DataContext. Таблица. Присоединение (рекордный, верный) и затем DataContext. SubmitChanges (). Но мне не изложили в деталях его полностью...

Таким образом, теперь я сделал тест. Это будет только работать, если Вы не потребуете проверки параллелизма (т.е. Вы - единственный, обновляющий таблицу).

Вот моя таблица

People
PersonID int
FirstName varchar(50)
LastName varchar(50)

Я заполнил таблицу со следующей записью

> PersonID     FirstName    LastName
> 1            Jason        Punyon

Я создал LINQ2SQL DataContext только с этой таблицей под названием PeopleDataContext и на каждом свойстве Людей Класс, к которому я устанавливал свойство UpdateCheck каждого рекордного свойства Никогда.

Вот код:

static void Main(string[] args)
{
    var p = new People();
    p.PersonID = 1;
    p.FirstName = "Jason";
    p.LastName = "This is a new last name";


    using (var db = new PeopleDataContext())
    {
        db.Peoples.Attach(p, true);
        db.SubmitChanges();
    }
}

И это работает успешно. Никакое отражение или что-либо, но как я сказал, Вы теряете проверку параллелизма.

1
ответ дан 17 December 2019 в 04:52
поделиться

Лучше удалить запись и сделать InsertOnSubmit () в этом случае?

Нет, определенно не - просто рассматривают ссылочную целостность, которую должен использовать любой хороший, стабильный дизайн DB. Если Ваша запись уже используется другими строками, Вы не можете просто удалить ее и повторно вставить ее - Вы повредили бы те ограничения целостности.

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

Marc

1
ответ дан 17 December 2019 в 04:52
поделиться

Я не удалил бы/воссоздал бы. При предположении, что эти два объекта имеют тот же интерфейс относительно свойств, которые Вы хотите обновить, я использовал бы отражение и скопировал бы значения изменения в существующем объекте. Если какое-либо из значений будет отличаться от оригинала, то запись будет отмечена как бывший должный быть обновленной, и SubmitChanges будет заботиться о нем.

Например (с небольшой проверкой ошибок):

 foreach (var bookInfo in bookContent.GetType().GetProperties())
 {
     var partialInfo = partialContent.GetType().GetProperty( bookInfo.Name );
     if (partialInfo != null)
     {
         bookInfo.SetValue( partialInfo.GetValue( partialContent, null ) );
     }
 }

Если бы Вы знали, что они были тем же типом, то Вы могли снова использовать первый PropertyInfo вместо того, чтобы получить новый для partialContent.

0
ответ дан 17 December 2019 в 04:52
поделиться
Другие вопросы по тегам:

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