Entity Framework 4, объекты POCO и ASP.Net MVC2. У меня много отношений, скажем, между объектами BlogPost и Tag. Это означает, что в моем сгенерированном T4 классе POCO BlogPost у меня есть:
public virtual ICollection Tags {
// getter and setter with the magic FixupCollection
}
private ICollection _tags;
Я запрашиваю BlogPost и связанные теги из экземпляра ObjectContext и отправляю его на другой уровень (просмотр в приложении MVC). Позже я возвращаю обновленный BlogPost с измененными свойствами и измененными отношениями. Например, у него были теги «A», «B» и «C», а новые теги - «C» и «D». В моем конкретном примере нет новых тегов, и свойства тегов никогда не меняются, поэтому единственное, что следует сохранить, - это измененные отношения. Теперь мне нужно сохранить это в другом ObjectContext. (Обновление: теперь я попытался сделать это в том же экземпляре контекста, но тоже потерпел неудачу.)
Проблема: я не могу заставить его правильно сохранять отношения. Я перепробовал все, что нашел:
"Не работает" в большинстве случаев означает, что я работал над данным "решением", пока оно не выдает ошибок и не сохраняет по крайней мере свойства BlogPost . Что происходит с отношениями, различается: обычно теги снова добавляются в таблицу тегов с новыми PK, и сохраненный BlogPost ссылается на них, а не на исходные. Конечно, у возвращенных тегов есть PK, и перед методами сохранения / обновления я проверяю PK, и они равны тем, что есть в базе данных, поэтому, вероятно, EF думает, что это новые объекты, а эти PK являются временными.
A проблема, о которой я знаю, и может сделать невозможным найти автоматизированное простое решение: когда коллекция объекта POCO изменяется, это должно происходить с помощью вышеупомянутого свойства виртуальной коллекции, потому что тогда трюк FixupCollection обновит обратные ссылки на другом конце отношения "многие ко многим". Однако, когда View «возвращает» обновленный объект BlogPost, этого не произошло. который компилируется и используется в качестве предиката для вызова LINQ-to-SQL Where (). Проблема в том, что я пытаюсь сравнить Enum (с int в качестве его ...
Я пытаюсь динамически построить дерево выражений на C #, которое компилируется и используется в качестве предиката для LINQ-to-SQL Where ( ). Проблема в том, что я пытаюсь сравнить Enum (с int в качестве базового типа) напрямую с Int, но это не дает результата с ошибкой «Член MyEnumType не поддерживает преобразование в SQL».
Код :
ParameterExpression param = Expression.Parameter(typeof(MyClass), "obj"); //input parameter - this exposes a property of the Enum type
MemberExpression enumMember = Expression.Property(param, "MyEnumProperty"); //used to get the Enum typed property from the parameter
//MISSING STEP TO CAST THE ENUM OF THE MEMBER EXPRESSION TO AN INT?
BinaryExpression binaryExpr = Expression.Equal(enumMember, Expression.Constant(1));
LambdaExpression> whereClause = Expression.Lambda(binaryExpr, param);
//when whereClause is used to filter LINQ-to-SQL results, the error is thrown
Я новичок в деревьях выражений и не могу этого понять. Я пробовал использовать
Expression.Convert(enumMember, typeof(int))
в качестве первой части BinaryExpression, но это не помогло.
Любая помощь - это очень много. оценен.