Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq 是否可以在实体框架中将现有类用作POCO_Linq_Entity Framework_Poco - Fatal编程技术网

Linq 是否可以在实体框架中将现有类用作POCO

Linq 是否可以在实体框架中将现有类用作POCO,linq,entity-framework,poco,Linq,Entity Framework,Poco,我能够用微软的软件生成POCO。它工作得很好 我的问题是如何修改此模板或任何其他模板以使用来自不同程序集的现有对象,并将数据加载到其中 我尝试的方法是使用模板创建POCO,并使用现有模型创建PocoGenerator.Context,然后修改生成的代码以返回我的类而不是它生成的类 这给了我一个可怕的“无法找到EntityType MyType的映射和元数据信息”。。这可能是因为数据库中有一些我的对象没有的额外字段。我试图修改实体对象并删除这些字段,但这会导致一些其他问题 有人这样做过吗 UDPA

我能够用微软的软件生成POCO。它工作得很好

我的问题是如何修改此模板或任何其他模板以使用来自不同程序集的现有对象,并将数据加载到其中

我尝试的方法是使用模板创建POCO,并使用现有模型创建PocoGenerator.Context,然后修改生成的代码以返回我的类而不是它生成的类

这给了我一个可怕的“无法找到EntityType MyType的映射和元数据信息”。。这可能是因为数据库中有一些我的对象没有的额外字段。我试图修改实体对象并删除这些字段,但这会导致一些其他问题

有人这样做过吗

UDPATE

是的,可以使用现有的类。需要注意的一点是,如果某些属性名称或类型之间不匹配,则会触发上面的非信息性错误。有时,运行时会给出一个有意义的错误,其属性名称不兼容,但只有在两个类非常接近的情况下才会出现

无论如何,要将现有类用作POCO,只需生成POCO,然后注释掉生成的类。而不是在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);
var properties=typeof(MyExistingClass).GetProperties();
var tproperties=typeof(MyPOCOClass).GetProperties();
Console.WriteLine(“---------------------------------------缺少或不同属性-----------------”;
List missingOrDifferentProperties=新列表();
foreach(tproperties中的var tp)
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);

听起来您可能首先要查找最新的CTP4 for Entity Framework中的代码


请参阅主题:“是否可以在实体框架中将激动人心的类用作POCO?”抱歉,代码中没有激动人心的类。请添加令人兴奋的课程,然后重试。:-)嗯,我只是厌倦了枯燥乏味的课程,这些课程并不令人兴奋。如果我采用代码优先的方法,那会创建表吗?因为我不想那样做。这些表已经存在,我无法修改它们。我只想使用现有的类,而不必手动将实体转换为它们。在我的例子中,使用现有类是一个困难的要求。您可以先对现有数据库使用代码,请参阅,但我要提醒您,目前这只是一个CTP,存在“问题”。您最好先使用数据库,然后使用Automapper在实体框架对象和现有类之间进行映射。