【发布时间】:2010-10-20 19:41:19
【问题描述】:
我能够使用来自 Microsoft 的 POCO template 生成 pocos。效果很好。
我的问题是如何修改此模板或任何其他模板以使用来自不同程序集的现有对象,并将数据加载到其中。
我尝试的方法是使用模板创建 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);
【问题讨论】:
-
主题阅读:“是否可以在实体框架中使用令人兴奋的类作为 POCO?”抱歉,您的代码中没有令人兴奋的类。请添加一个令人兴奋的课程,然后再试一次。 :-)
-
好吧,我只是厌倦了无聊的课程。
-
@SonicSoul 这个问题因为修改而被顶到了首页。看来您在“更新”部分自己回答了。如果您仍然认为它相关,您介意将其转换为(接受的)答案吗?
-
@GertArnold 当然,已发布。
标签: linq entity-framework poco