Мне пришлось установить «Уровень оптимизации» в «Swift Compiler - Generation Code» на «Release» - «No Optimization [-Onone]» из «Optimize for speed», чтобы заставить Cache передавать архив.
То же самое с SwiftyBeaver
Кажется, проблема связана с Xcode 10.2. Кроме того, другие проекты с пакетом, похоже, подходят для оптимизации, такие как Toucan или XCGLogger.
Я думаю, что понятие редактирования записи отличается от удаления и вставки новой. В основном я думаю, что ORM должен абстрагировать далеко поколение первичного ключа и другой связанный материал. Путем удаления и вставки, Вы могли бы удалять целостность записи (вероятно, издание нового первичного ключа, делая объекты, на которые ссылаются, недопустимыми и т.д...). Я предлагаю обновить запись каждый раз, когда меры, которые Вы принимаете, являются концептуально обновлением.
Можно рассмотреть использование автокартопостроителя для копирования значений для Вас. Проверьте это на большее количество информации: http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/01/22/automapper-the-object-object-mapper.aspx
Я думаю, что Вы могли использовать что-то как 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();
}
}
И это работает успешно. Никакое отражение или что-либо, но как я сказал, Вы теряете проверку параллелизма.
Лучше удалить запись и сделать InsertOnSubmit () в этом случае?
Нет, определенно не - просто рассматривают ссылочную целостность, которую должен использовать любой хороший, стабильный дизайн DB. Если Ваша запись уже используется другими строками, Вы не можете просто удалить ее и повторно вставить ее - Вы повредили бы те ограничения целостности.
Если Вы просто изменяете несколько значений, обновляете существующую строку - намного легче и намного более последовательный.
Marc
Я не удалил бы/воссоздал бы. При предположении, что эти два объекта имеют тот же интерфейс относительно свойств, которые Вы хотите обновить, я использовал бы отражение и скопировал бы значения изменения в существующем объекте. Если какое-либо из значений будет отличаться от оригинала, то запись будет отмечена как бывший должный быть обновленной, и 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.