LINQ к атрибуту имени столбца объекта SQL проигнорирован с первичным ключом гуида

Если элементы находятся в древовидном порядке, как показано в Вашем примере, можно использовать что-то как следующий пример Python:

delimiter = '.'
stack = []
for item in items:
  while stack and not item.startswith(stack[-1]+delimiter):
    print "</div>"
    stack.pop()
  print "<div>"
  print item
  stack.append(item)

то, Что это делает, поддерживают стек, представляющий текущую позицию в дереве. Для каждого элемента в таблице это выталкивает элементы стека (закрывающий отделения соответствия), пока это не находит родителя текущего объекта. Тогда это производит запуск того узла и продвигает его к стеку.

, Если Вы хотите произвести расположение с отступом использования дерева, а не вложенные элементы, можно просто пропустить операторы печати, чтобы распечатать отделения и распечатать много пробелов, равных некоторым несколько из размера стека перед каждым объектом. Например, в Python:

print "  " * len(stack)

Вы могли также легко использовать этот метод для построения ряда вложенных списков или словарей.

Редактирование: Я вижу от Вашего разъяснения, что имена не были предназначены, чтобы быть путями узла. Это предлагает альтернативный подход:

idx = {}
idx[0] = []
for node in results:
  child_list = []
  idx[node.Id] = child_list
  idx[node.ParentId].append((node, child_list))

Это создает дерево массивов кортежей (!). idx [0] представляет корень (корни) дерева. Каждый элемент в массиве является с 2 кортежами, состоящим из самого узла и списка всех его детей. После того, как созданный, можно держаться за idx [0] и отбросить idx, если Вы не хотите получить доступ к узлам их идентификатором.

11
задан Brian Reiter 1 July 2009 в 04:29
поделиться

5 ответов

Это ошибка в Linq-to-SQL. Это исправлено в .net 4.0.

См. Connect # 381883: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=381883

6
ответ дан 3 December 2019 в 10:44
поделиться

Вы пробовали использовать свойство Хранилище ?

[Table( Name="TBL_REGISTRATION" )]
public sealed class Registration : IDataErrorInfo
{
        [Column( Name="TBL_REGISTRATION_PK", Storage="_RegistrationID", IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert )]
        public Guid RegistrationID { get { return _RegistrationID; } set { _RegistrationID = value; } }

        private Guid _RegistrationID;
    /* other properties ommited for brevity */
}

См. Также Сопоставление на основе атрибутов (LINQ to SQL)

0
ответ дан 3 December 2019 в 10:44
поделиться

Необходимо удалить свойство "частный" из "частного набора"; Когда вы создаете сокращенные свойства в VS 2008 без реализации get / set, компилятор создает для вас частные переменные-члены (имя которых, кто знает). Параметр Storage в ColumnAttribute указывает, какой закрытый член использовать.

Linq to SQL не знает, как установить свойство, если вы помечаете установщик как частный, а получатель - как открытый (не спрашивайте меня, почему). Если вы хотите сделать свое свойство доступным только для чтения, создайте частную переменную-член, как вы это сделали выше.

Вы можете очистить ее, написав следующим образом:

    [Table( Name="TBL_REGISTRATION" )]
    public sealed class Registration : IDataErrorInfo
    {
            public Guid RegistrationID { get { return _registrationID; } }

            [Column( IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
            private Guid _registrationID; 
}
2
ответ дан 3 December 2019 в 10:44
поделиться

Предел виртуального адресного пространства процесс Win32 составляет 1,5 ГБ (не совсем так). Дополнительно в. NET существует ограничение на процент памяти, который может использовать процесс .NET. В файле machine.config есть элемент processModel с атрибутом memoryLimit, который представляет собой% доступной памяти, которую процесс может использовать. Значение по умолчанию - 60%.

Если компьютер, на котором вы работаете, имеет 2 ГБ памяти или вы не включили переключатель / 3 ГБ в вашем BOOT.INI, то вы получите ~ 1,3 ГБ памяти на каждый

Я не могу найти статью в базе знаний, но, если я правильно помню, .NET 1.x не может обращаться за пределами лимита 1,5 ГБ (1,8 ГБ?) независимо от ваших настроек.

http: //blogs.msdn .com / tmarq / archive / 2007/06/25 / some-history-on-the-asp-net-cache-memory-limits.aspx http://social.msdn.microsoft.com/Forums/en -US / clr / thread / c50ea343-b41b-467d-a457-c5a735e4dfff http://www.guidanceshare.com/wiki/ASP.NET_1. Таким образом, сервер может предоставить некоторые или все данные, которые мы ищем. Для целых чисел он может построить их с помощью простой арифметики (двойной или двойной и добавить 1 для каждого бита), для битов он просто предоставляет соответствующий зашифрованный бит.

Мы можем смешивать и сопоставлять логические и целочисленные значения в наших проектах, получая if / then / else (который требует оценки стиля SIMD обеих ветвей), оценивая cond * then + (1 - cond) * else, используя 1 как истину и 0 как false в cond, поэтому вы можете обойтись без использования встроенной арифметики вашего кольца, чтобы сделать ваши схемы более мелкими.

С другой стороны, мы могли предварительно зашифровать некоторые данные, но поскольку вы ' Придется повторно использовать один и тот же набор ключей, чтобы сделать это правильно.

Итак, теперь у нас есть данные, предоставленные сервером. Теперь зашифруйте то, что вы не делаете Я хочу, чтобы сервер знал, что именно вы ищете, и попросил их передать это в схему в нужных точках, скажем, в качестве дополнительных входных данных для вашей функции карты.

Мы должны иметь возможность отображать произвольная NC1-подобная схема для каждого входа для извлечения поля, умножения некоторых значений и, как правило, преобразования его в форму, которую можно легко уменьшить.

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

Поскольку вам нужно только логически построить схему и смоделировать ее выполнение на этих зашифрованных битах в гомоморфном кольце вы, вероятно, могли бы относительно быстро реализовать это, используя небольшой DSL, т.е.

0
ответ дан 3 December 2019 в 10:44
поделиться

Лучшее решение, которое я нашел для этой проблемы, - создать личное поле Guid в классе, имя которого совпадает с именем первичного ключа в базе данных, и использовать его в качестве резервного поля. для свойства, которое соответствует правилам именования Framework Guideline.

// Primary key to TBL_REGISTRATIONT
[Column( Name = "TBL_REGISTRATIONT_PK", IsDbGenerated = true, AutoSync = AutoSync.OnInsert )]
public Guid RegistrationID
{
    get
    {
        return TBL_REGISTRATIONT_PK;
    }
    private set
    {
        TBL_REGISTRATIONT_PK = value;
    }
}
[Column( IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert )]
private Guid TBL_REGISTRATIONT_PK;
0
ответ дан 3 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

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