Мне удалось сгенерировать документы, используя шаблон POCO от Microsoft. Работает отлично.
Мой вопрос заключается в том, как я могу изменить этот или любой другой шаблон, чтобы использовать существующие объекты из другой сборки и просто загружать в них данные.
Способ, которым я пытался это сделать, заключался в создании POCO с использованием шаблона и PocoGenerator.Context для использования существующей модели, а затем в изменении сгенерированного кода, чтобы он возвращал мое выражение вместо сгенерированных классов.
это дает мне страшную «информацию сопоставления и метаданных, не найденную для EntityType MyType» .. Это может быть потому, что в базе данных есть несколько дополнительных полей, которых нет у моего объекта. Я попытался изменить объекты и удалить эти поля, но это вызывает некоторые другие проблемы ..
кто-нибудь делал это?
UDPATE
Да, можно использовать существующие классы. Единственное, на что следует обратить внимание, так это на то, что неинформативная ошибка, приведенная выше, будет вызвана несоответствием между некоторыми именами или типами свойств. Иногда среда выполнения выдает значимую ошибку с именем свойства, которое несовместимо, но это только в том случае, если оба класса действительно близки.
В любом случае, чтобы использовать существующие классы в качестве pocos, просто сгенерируйте pocos, а затем закомментируйте сгенерированные классы. Затем в xxxPocoGenerator.Context.cs добавьте необходимое пространство имен существующих объектов для использования.
В качестве примечания я написал следующий код, чтобы сравнить мои существующие классы с классами, сгенерированными POCO, и показать те, которые не совпадают, чтобы я мог их исправить.
var properties = typeof(MyExistingClass).GetProperties();
var tproperties = typeof(MyPOCOClass).GetProperties();
Console.WriteLine("---------------------------------Missing or Different Properties--------------------");
List<PropertyInfo> missingOrDifferentProperties = new List<PropertyInfo>();
foreach (var tp in tproperties)
if (properties.Where(p => p.Name == tp.Name && p.PropertyType == tp.PropertyType && p.CanRead == tp.CanRead && p.CanWrite == tp.CanWrite && p.IsSpecialName == tp.IsSpecialName && p.MemberType == tp.MemberType).Count() != 1)
Console.WriteLine(tp.Name + " :: " + tp.PropertyType.Name);