Что лучший способ состоит в том, чтобы синхронизировать 2 sqlite таблицы по http и json?

Я не уверен, что это решение вашей проблемы, но это позволит вам добавить [KnownType(typeof(entity.Name))] в ваш Model.tt. Не точно имя объекта, а имена объектов каждого свойства навигации коллекции.

Это строка 1-70 моего измененного файла Model.tt. Я только изменил строки между комментариями //START MODIFICATION и //END MODIFICATION.

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#><#@ 
 output extension=".cs"#><#

const string inputFile = @"Model.edmx";
var textTransform = DynamicTextTransformation.Create(this);
var code = new CodeGenerationTools(this);
var ef = new MetadataTools(this);
var typeMapper = new TypeMapper(code, ef, textTransform.Errors);
var fileManager = EntityFrameworkTemplateFileManager.Create(this);
var itemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile);
var codeStringGenerator = new CodeStringGenerator(code, typeMapper, ef);

if (!typeMapper.VerifyCaseInsensitiveTypeUniqueness(typeMapper.GetAllGlobalItems(itemCollection), inputFile))
{
    return string.Empty;
}

WriteHeader(codeStringGenerator, fileManager);

foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
    fileManager.StartNewFile(entity.Name + ".cs");
    BeginNamespace(code);
#>
//START MODIFICATION
using System.Runtime.Serialization;
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
<#
    var propertiesWithDefaultValues = typeMapper.GetPropertiesWithDefaultValues(entity);
    var collectionNavigationProperties = typeMapper.GetCollectionNavigationProperties(entity);
    var complexProperties = typeMapper.GetComplexProperties(entity);

    foreach (var navigationProperty in collectionNavigationProperties)
    {
#>
[KnownType(typeof(<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>))]
<#
    }
#>
<#=codeStringGenerator.EntityClassOpening(entity)#>
{
<#
    if (propertiesWithDefaultValues.Any() || collectionNavigationProperties.Any() || complexProperties.Any())
    {
#>
    public <#=code.Escape(entity)#>()
    {
//END MODIFICATION
<#
        foreach (var edmProperty in propertiesWithDefaultValues)
        {
#>
        this.<#=code.Escape(edmProperty)#> = <#=typeMapper.CreateLiteral(edmProperty.DefaultValue)#>;
<#
        }

        foreach (var navigationProperty in collectionNavigationProperties)
        {
#>
        this.<#=code.Escape(navigationProperty)#> = new HashSet<<#=typeMapper.GetTypeName(navigationProperty.ToEndMember.GetEntityType())#>>();
<#
        }

        foreach (var complexProperty in complexProperties)
        {
#>
        this.<#=code.Escape(complexProperty)#> = new <#=typeMapper.GetTypeName(complexProperty.TypeUsage)#>();
<#
        }
#>
    }
12
задан John Wright 29 November 2008 в 18:11
поделиться

1 ответ

Я предполагаю, что изменения, вероятно, будут в конце. Я не знаю символа вставки и обновлений, но вот моя идея;

  • Я был бы SHA1 (или MD5, он не имеет значения в этом случае), дни текущего месяца и за месяцы до этого. Сравнение против этих цифровых отпечатков является быстрым способом видеть, были различия. (Я оставляю сегодня нехешированным),
  • Если предыдущие месяцы расходятся во мнениях;
    • Если объем в течение месяца является слишком большим, мы можем затем разделить месяц и просто генерировать ежедневный цифровой отпечаток на лету вместо того, чтобы сравнить целый месяц.
    • Иначе мы можем рассматривать ежемесячное изменение тем же путем, мы рассматриваем ежедневное изменение.
  • После обнаружения, где изменения происходят, основная копия отправила бы список всего уникального идентификатора в течение того периода. (Всегда отправка сегодняшней информации)
  • Ведомое устройство затем удаляет то, что должно быть удалено и составляет список идентификатора, который будет вставлен.
  • Ведущее устройство отправляет только те записи (полностью).

Категории времени (день, месяц) могут быть скорректированы согласно объему данных.

Конечно, это - наивный и простой алгоритм. Если бы я обрабатывал чувствительные / критические данные, то я искал бы транзакционный алгоритм.

2
ответ дан 3 December 2019 в 00:00
поделиться
Другие вопросы по тегам:

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