EF4 POCO(不使用T4):无法为EntityType找到映射和元数据信息 [英] EF4 POCO (not using T4): Mapping and metadata information could not be found for EntityType
问题描述
问题:一旦添加了另一个Entity数据模型(即使我添加了一个空白的),在Ef2PlaygroundModel_3Container中调用CreateObjectSet抛出以下异常:
未处理的异常:System.InvalidOperationException:无法为EntityType'EF2_Playground.Driver找到映射和元数据信息。 System.Data.Objects.ObjectContext.GetTypeUsage(Type entityCLRType)中的
$ System.Data.Objects.ObjectContext.GetEntitySetFromContainer(EntityContainer容器,Type entityCLRType,String exceptionParameterName)中的
System.Data中的
.Objects.ObjectContext.GetEntitySetForType(Type entityCLRType,String exceptionParameterName)
在System.Data.Objects.ObjectContext.CreateObjectSet [TEntity]()
在EF2_Playground.Ef2PlaygroundModel_3Container.get_Drivers()在C:\。 .. \Ef2PlaygroundModel_3Pocos.cs:行64
在EF2_Playground.Program.Main(String [] args)在C:\ ... \Program.cs:行15
$ c有没有人知道这里有什么问题吗?
这是工作项目:
Ef2PlaygroundModel_3.edmx: p>
代码生成策略设置为无
<?xml version =1.0encoding =utf-8?>
< edmx:Edmx Version =2.0xmlns:edmx =http://schemas.microsoft.com/ado/2008/10/edmx>
<! - EF运行时内容 - >
< edmx:运行时>
<! - SSDL内容 - >
< edmx:StorageModels>
< Schema Namespace =Ef2PlaygroundModel_3.StoreAlias =SelfProvider =System.Data.SqlClientProviderManifestToken =2008xmlns:store =http://schemas.microsoft.com/ado/ 2007/12 / edm / EntityStoreSchemaGeneratorxmlns =http://schemas.microsoft.com/ado/2009/02/edm/ssdl>
< EntityContainer Name =Ef2PlaygroundModel_3StoreContainer>
< EntitySet Name =CarsEntityType =Ef2PlaygroundModel_3.Store.Carsstore:Type =TablesSchema =dbo/>
< EntitySet Name =DriversEntityType =Ef2PlaygroundModel_3.Store.Driversstore:Type =TablesSchema =dbo/>
< EntitySet Name =CarDriverEntityType =Ef2PlaygroundModel_3.Store.CarDriverstore:Type =TablesSchema =dbo/>
< AssociationSet Name =FK_CarDriver_CarAssociation =Ef2PlaygroundModel_3.Store.FK_CarDriver_Car>
< End Role =CarEntitySet =Cars/>
< End Role =CarDriverEntitySet =CarDriver/>
< / AssociationSet>
< AssociationSet Name =FK_CarDriver_DriverAssociation =Ef2PlaygroundModel_3.Store.FK_CarDriver_Driver>
< End Role =DriverEntitySet =Drivers/>
< End Role =CarDriverEntitySet =CarDriver/>
< / AssociationSet>
< / EntityContainer>
< EntityType Name =Cars>
< Key>
< PropertyRef Name =Id/>
< / Key>
< Property Name =IdType =intStoreGeneratedPattern =IdentityNullable =false/>
< Property Name =BrandType =nvarchar(max)Nullable =false/>
< Property Name =ModelType =nvarchar(max)Nullable =false/>
< Property Name =ReleaseDateType =datetimeNullable =true/>
< / EntityType>
< EntityType Name =Drivers>
< Key>
< PropertyRef Name =Id/>
< / Key>
< Property Name =IdType =intStoreGeneratedPattern =IdentityNullable =false/>
< Property Name =NameType =nvarchar(max)Nullable =false/>
< / EntityType>
< EntityType Name =CarDriver>
< Key>
< PropertyRef Name =Cars_Id/>
< PropertyRef Name =Drivers_Id/>
< / Key>
< Property Name =Cars_IdType =intNullable =false/>
< Property Name =Drivers_IdType =intNullable =false/>
< / EntityType>
< Association Name =FK_CarDriver_Car>
< End Role =CarType =Ef2PlaygroundModel_3.Store.CarsMultiplicity =1/>
< End Role =CarDriverType =Ef2PlaygroundModel_3.Store.CarDriverMultiplicity =*/>
<参考证明>
< Principal Role =Car>
< PropertyRef Name =Id/>
< / Principal>
<从属角色=CarDriver>
< PropertyRef Name =Cars_Id/>
< / Dependent>
< / ReferentialConstraint>
< / Association>
<关联名称=FK_CarDriver_Driver>
< End Role =CarDriverType =Ef2PlaygroundModel_3.Store.CarDriverMultiplicity =*/>
< End Role =DriverType =Ef2PlaygroundModel_3.Store.DriversMultiplicity =1/>
<参考证明>
< Principal Role =Driver>
< PropertyRef Name =Id/>
< / Principal>
<从属角色=CarDriver>
< PropertyRef Name =Drivers_Id/>
< / Dependent>
< / ReferentialConstraint>
< / Association>
< / Schema>
< / edmx:StorageModels>
<! - CSDL内容 - >
< edmx:ConceptualModels>
< Schema xmlns =http://schemas.microsoft.com/ado/2008/09/edmxmlns:cg =http://schemas.microsoft.com/ado/2006/04/codegeneration xmlns:store =http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGeneratorNamespace =Ef2PlaygroundModel_3Alias =Selfxmlns:annotation =http://schemas.microsoft.com / ADO / 2009/02 / EDM /注释>
< EntityContainer Name =Ef2PlaygroundModel_3Container注释:LazyLoadingEnabled =true>
< EntitySet Name =CarsEntityType =Ef2PlaygroundModel_3.Car/>
< EntitySet Name =DriversEntityType =Ef2PlaygroundModel_3.Driver/>
< AssociationSet Name =CarDriverAssociation =Ef2PlaygroundModel_3.CarDriver>
< End Role =CarEntitySet =Cars/>
< End Role =DriverEntitySet =Drivers/>
< / AssociationSet>
< / EntityContainer>
< EntityType Name =Car>
< Key>
< PropertyRef Name =Id/>
< / Key>
< Property Type =Int32Name =IdNullable =false注释:StoreGeneratedPattern =Identity/>
< Property Type =StringName =BrandNullable =false/>
< Property Type =StringName =ModelNullable =false/>
< Property Type =DateTimeName =ReleaseDateNullable =true/>
< NavigationProperty Name =DriversRelationship =Ef2PlaygroundModel_3.CarDriverFromRole =CarToRole =Driver/>
< / EntityType>
< EntityType Name =Driver>
< Key>
< PropertyRef Name =Id/>
< / Key>
< Property Type =Int32Name =IdNullable =false注释:StoreGeneratedPattern =Identity/>
< Property Type =StringName =NameNullable =false/>
< NavigationProperty Name =CarsRelationship =Ef2PlaygroundModel_3.CarDriverFromRole =DriverToRole =Car/>
< / EntityType>
<关联名称=CarDriver>
< End Type =Ef2PlaygroundModel_3.CarRole =CarMultiplicity =*/>
< End Type =Ef2PlaygroundModel_3.DriverRole =DriverMultiplicity =*/>
< / Association>
< / Schema>
< / edmx:ConceptualModels>
<! - C-S映射内容 - >
< edmx:映射>
< Mapping Space =C-Sxmlns =http://schemas.microsoft.com/ado/2008/09/mapping/cs>
< EntityContainerMapping StorageEntityContainer =Ef2PlaygroundModel_3StoreContainerCdmEntityContainer =Ef2PlaygroundModel_3Container>
< EntitySetMapping Name =Cars>
< EntityTypeMapping TypeName =IsTypeOf(Ef2PlaygroundModel_3.Car)>
< MappingFragment StoreEntitySet =Cars>
< ScalarProperty Name =IdColumnName =Id/>
< ScalarProperty Name =BrandColumnName =Brand/>
< ScalarProperty Name =ModelColumnName =Model/>
< ScalarProperty Name =ReleaseDateColumnName =ReleaseDate/>
< / MappingFragment>
< / EntityTypeMapping>
< / EntitySetMapping>
< EntitySetMapping Name =Drivers>
< EntityTypeMapping TypeName =IsTypeOf(Ef2PlaygroundModel_3.Driver)>
< MappingFragment StoreEntitySet =Drivers>
< ScalarProperty Name =IdColumnName =Id/>
< ScalarProperty Name =NameColumnName =Name/>
< / MappingFragment>
< / EntityTypeMapping>
< / EntitySetMapping>
< AssociationSetMapping Name =CarDriverTypeName =Ef2PlaygroundModel_3.CarDriverStoreEntitySet =CarDriver>
< EndProperty Name =Car>
< ScalarProperty Name =IdColumnName =Cars_Id/>
< / EndProperty>
< EndProperty Name =Driver>
< ScalarProperty Name =IdColumnName =Drivers_Id/>
< / EndProperty>
< / AssociationSetMapping>
< / EntityContainerMapping>
< / Mapping>
< / edmx:映射>
< / edmx:Runtime>
<! - EF设计师内容(请勿手动编辑此处) - >
< edmx:Designer xmlns =http://schemas.microsoft.com/ado/2008/10/edmx>
< edmx:Connection>
< DesignerInfoPropertySet>
< DesignerProperty Name =MetadataArtifactProcessingValue =EmbedInOutputAssembly/>
< / DesignerInfoPropertySet>
< / edmx:Connection>
< edmx:选项>
< DesignerInfoPropertySet>
< DesignerProperty Name =ValidateOnBuildValue =true/>
< DesignerProperty Name =EnablePluralizationValue =False/>
< DesignerProperty Name =CodeGenerationStrategyValue =None/>
< / DesignerInfoPropertySet>
< / edmx:选项>
<! - 图表内容(形状和连接器位置) - >
< edmx:Diagrams>
< Diagram Name =Ef2PlaygroundModel_3>
< EntityTypeShape EntityType =Ef2PlaygroundModel_3.CarWidth =1.5PointX =3.25PointY =1.625Height =1.787985026041667/>
< EntityTypeShape EntityType =Ef2PlaygroundModel_3.DriverWidth =1.5PointX =5.375PointY =1.625Height =1.59568359375/>
< AssociationConnector Association =Ef2PlaygroundModel_3.CarDriver>
< ConnectorPoint PointX =4.75PointY =2.422841796875/>
< ConnectorPoint PointX =5.375PointY =2.422841796875/>
< / AssociationConnector>
< / Diagram>
< / edmx:Diagrams>
< / edmx:Designer>
< / edmx:Edmx>
app.config:
< configuration>
< connectionStrings>
< add
name =Ef2PlaygroundModel_3Container
connectionString =metadata = res://*/Ef2PlaygroundModel_3.csdl | res://*/Ef2PlaygroundModel_3.ssdl | res:// * /Ef2PlaygroundModel_3.msl;provider=System.Data.SqlClient;provider connection string =& quot; Data Source = .\SqlExpress; Initial Catalog = Ef2PlaygroundModel_3; Integrated Security = True; MultipleActiveResultSets = True& quot;
providerName =System.Data.EntityClient
/>
< / connectionStrings>
< / configuration>
Ef2PlaygroundModel_3Pocos.cs:
使用系统;
使用System.Collections.Generic;
使用System.Data.Objects;
命名空间EF2_Playground
{
public class Car
{
public Car()
{
Drivers = new List& ;();
}
public int Id {get;组; }
public string品牌{get;组; }
public string Model {get;组; }
public DateTime? ReleaseDate {get;组; }
public virtual List< Driver>司机{get;私人集合
public class Driver
{
public Driver()
{
Cars = new List< Car>();
}
public int Id {get;组; }
public string Name {get;组; }
public virtual List< Car>汽车私人集合
$ b public class Ef2PlaygroundModel_3Container:ObjectContext
{
public Ef2PlaygroundModel_3Container()
:base(name = Ef2PlaygroundModel_3Container)
{
ContextOptions.LazyLoadingEnabled = true;
}
public IObjectSet< Car> Cars
{
get {return CreateObjectSet< Car>(); }
}
public IObjectSet< Driver>驱动
{
get {return CreateObjectSet< Driver>(); }
}
}
}
cs:
using System;
命名空间EF2_Playground
{
类程序
{
static void Main(string [] args)
{
using var ctx = new Ef2PlaygroundModel_3Container())
{
foreach(ctx.Drivers中的var驱动程序)
{
Console.WriteLine(driver.Name);
foreach(驱动程序中的var car)
{
Console.WriteLine(驱动{0} - {1}(在{2}上发布),car.Brand,car 。型号,car.ReleaseDate);
}
}
}
}
}
}
最后,一旦将我添加到项目中,Model1.edmx就会打破整个事情:
<?xml version =1.0encoding =utf-8?>
< edmx:Edmx Version =2.0xmlns:edmx =http://schemas.microsoft.com/ado/2008/10/edmx>
<! - EF运行时内容 - >
< edmx:运行时>
<! - SSDL内容 - >
< edmx:StorageModels>
< Schema xmlns =http://schemas.microsoft.com/ado/2009/02/edm/ssdlNamespace =Model1.StoreAlias =SelfProvider =System.Data.SqlClient ProviderManifestToken =2005>
< EntityContainer Name =Model1TargetContainer>
< / EntityContainer>
< / Schema>
< / edmx:StorageModels>
<! - CSDL内容 - >
< edmx:ConceptualModels>
< Schema xmlns =http://schemas.microsoft.com/ado/2008/09/edmxmlns:cg =http://schemas.microsoft.com/ado/2006/04/codegeneration xmlns:store =http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGeneratorNamespace =Model1Alias =Selfxmlns:annotation =http://schemas.microsoft.com / ADO / 2009/02 / EDM /注释>
< EntityContainer Name =Model1Container注释:LazyLoadingEnabled =true>
< / EntityContainer>
< / Schema>
< / edmx:ConceptualModels>
<! - C-S映射内容 - >
< edmx:映射>
<映射xmlns =http://schemas.microsoft.com/ado/2008/09/mapping/csSpace =C-S>
< Alias Key =ModelValue =Model1/>
< Alias Key =TargetValue =Model1.Store/>
< EntityContainerMapping CdmEntityContainer =Model1ContainerStorageEntityContainer =Model1TargetContainer>
< / EntityContainerMapping>
< / Mapping>
< / edmx:映射>
< / edmx:Runtime>
<! - EF设计师内容(请勿手动编辑此处) - >
< edmx:Designer xmlns =http://schemas.microsoft.com/ado/2008/10/edmx>
< edmx:Connection>
< DesignerInfoPropertySet>
< DesignerProperty Name =MetadataArtifactProcessingValue =EmbedInOutputAssembly/>
< / DesignerInfoPropertySet>
< / edmx:Connection>
< edmx:选项>
< DesignerInfoPropertySet>
< DesignerProperty Name =ValidateOnBuildValue =true/>
< DesignerProperty Name =EnablePluralizationValue =False/>
< / DesignerInfoPropertySet>
< / edmx:选项>
<! - 图表内容(形状和连接器位置) - >
< edmx:Diagrams>
< Diagram Name =Model1/>
< / edmx:Diagrams>
< / edmx:Designer>
< / edmx:Edmx>
解决方案好吧,我想我已经有了。我将第二个模型(制造该项目的模型)减少到以下内容:
Class1.cs
使用System.Data.Objects.DataClasses;
[assembly:EdmSchemaAttribute()]
Bang!众所周知的异常出现。
在许多情况下,阅读文档有助于:
映射POCO实体不是支持,如果任何映射属性应用于自定义数据类,包括程序集级别的EdmSchemaAttribute。
当然,我不会字面上添加映射属性到CUSTOM数据类,但对于EdmSchemaAttribute无关紧要,因为它们位于程序集级别。
添加第二个非POCO模型会导致代码生成一个包含(至少)EdmSchemaAttribute并且不支持的类。
我学到了什么:不要在一个程序集中混合POCO和非POCO模型。 / p>
I have a pretty simple console project with an entity model (containing two simple entities), two handmade POCOs and a handmade Context class. The program fires a simple query against the DB and everything including LazyLoading works fine.
The problem: As soon as i add another Entity data model (even if i add an empty one), the calls to CreateObjectSet in Ef2PlaygroundModel_3Container throw the following exception:
Unhandled Exception: System.InvalidOperationException: Mapping and metadata information could not be found for EntityType 'EF2_Playground.Driver'.
at System.Data.Objects.ObjectContext.GetTypeUsage(Type entityCLRType)
at System.Data.Objects.ObjectContext.GetEntitySetFromContainer(EntityContainer container, Type entityCLRType, String exceptionParameterName)
at System.Data.Objects.ObjectContext.GetEntitySetForType(Type entityCLRType, String exceptionParameterName)
at System.Data.Objects.ObjectContext.CreateObjectSet[TEntity]()
at EF2_Playground.Ef2PlaygroundModel_3Container.get_Drivers() in C:\...\Ef2PlaygroundModel_3Pocos.cs:line 64
at EF2_Playground.Program.Main(String[] args) in C:\...\Program.cs:line 15
Does anyone have an idea about what is going wrong here?
That is the working project:
Ef2PlaygroundModel_3.edmx:
Code Generation Strategy is set to "None"
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema Namespace="Ef2PlaygroundModel_3.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl">
<EntityContainer Name="Ef2PlaygroundModel_3StoreContainer">
<EntitySet Name="Cars" EntityType="Ef2PlaygroundModel_3.Store.Cars" store:Type="Tables" Schema="dbo"/>
<EntitySet Name="Drivers" EntityType="Ef2PlaygroundModel_3.Store.Drivers" store:Type="Tables" Schema="dbo"/>
<EntitySet Name="CarDriver" EntityType="Ef2PlaygroundModel_3.Store.CarDriver" store:Type="Tables" Schema="dbo"/>
<AssociationSet Name="FK_CarDriver_Car" Association="Ef2PlaygroundModel_3.Store.FK_CarDriver_Car">
<End Role="Car" EntitySet="Cars"/>
<End Role="CarDriver" EntitySet="CarDriver"/>
</AssociationSet>
<AssociationSet Name="FK_CarDriver_Driver" Association="Ef2PlaygroundModel_3.Store.FK_CarDriver_Driver">
<End Role="Driver" EntitySet="Drivers"/>
<End Role="CarDriver" EntitySet="CarDriver"/>
</AssociationSet>
</EntityContainer>
<EntityType Name="Cars">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false"/>
<Property Name="Brand" Type="nvarchar(max)" Nullable="false"/>
<Property Name="Model" Type="nvarchar(max)" Nullable="false"/>
<Property Name="ReleaseDate" Type="datetime" Nullable="true"/>
</EntityType>
<EntityType Name="Drivers">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Name="Id" Type="int" StoreGeneratedPattern="Identity" Nullable="false"/>
<Property Name="Name" Type="nvarchar(max)" Nullable="false"/>
</EntityType>
<EntityType Name="CarDriver">
<Key>
<PropertyRef Name="Cars_Id"/>
<PropertyRef Name="Drivers_Id"/>
</Key>
<Property Name="Cars_Id" Type="int" Nullable="false"/>
<Property Name="Drivers_Id" Type="int" Nullable="false"/>
</EntityType>
<Association Name="FK_CarDriver_Car">
<End Role="Car" Type="Ef2PlaygroundModel_3.Store.Cars" Multiplicity="1"/>
<End Role="CarDriver" Type="Ef2PlaygroundModel_3.Store.CarDriver" Multiplicity="*"/>
<ReferentialConstraint>
<Principal Role="Car">
<PropertyRef Name="Id"/>
</Principal>
<Dependent Role="CarDriver">
<PropertyRef Name="Cars_Id"/>
</Dependent>
</ReferentialConstraint>
</Association>
<Association Name="FK_CarDriver_Driver">
<End Role="CarDriver" Type="Ef2PlaygroundModel_3.Store.CarDriver" Multiplicity="*"/>
<End Role="Driver" Type="Ef2PlaygroundModel_3.Store.Drivers" Multiplicity="1"/>
<ReferentialConstraint>
<Principal Role="Driver">
<PropertyRef Name="Id"/>
</Principal>
<Dependent Role="CarDriver">
<PropertyRef Name="Drivers_Id"/>
</Dependent>
</ReferentialConstraint>
</Association>
</Schema>
</edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm" xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" Namespace="Ef2PlaygroundModel_3" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation">
<EntityContainer Name="Ef2PlaygroundModel_3Container" annotation:LazyLoadingEnabled="true">
<EntitySet Name="Cars" EntityType="Ef2PlaygroundModel_3.Car"/>
<EntitySet Name="Drivers" EntityType="Ef2PlaygroundModel_3.Driver"/>
<AssociationSet Name="CarDriver" Association="Ef2PlaygroundModel_3.CarDriver">
<End Role="Car" EntitySet="Cars"/>
<End Role="Driver" EntitySet="Drivers"/>
</AssociationSet>
</EntityContainer>
<EntityType Name="Car">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Type="Int32" Name="Id" Nullable="false" annotation:StoreGeneratedPattern="Identity"/>
<Property Type="String" Name="Brand" Nullable="false"/>
<Property Type="String" Name="Model" Nullable="false"/>
<Property Type="DateTime" Name="ReleaseDate" Nullable="true"/>
<NavigationProperty Name="Drivers" Relationship="Ef2PlaygroundModel_3.CarDriver" FromRole="Car" ToRole="Driver"/>
</EntityType>
<EntityType Name="Driver">
<Key>
<PropertyRef Name="Id"/>
</Key>
<Property Type="Int32" Name="Id" Nullable="false" annotation:StoreGeneratedPattern="Identity"/>
<Property Type="String" Name="Name" Nullable="false"/>
<NavigationProperty Name="Cars" Relationship="Ef2PlaygroundModel_3.CarDriver" FromRole="Driver" ToRole="Car"/>
</EntityType>
<Association Name="CarDriver">
<End Type="Ef2PlaygroundModel_3.Car" Role="Car" Multiplicity="*"/>
<End Type="Ef2PlaygroundModel_3.Driver" Role="Driver" Multiplicity="*"/>
</Association>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping Space="C-S" xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs">
<EntityContainerMapping StorageEntityContainer="Ef2PlaygroundModel_3StoreContainer" CdmEntityContainer="Ef2PlaygroundModel_3Container">
<EntitySetMapping Name="Cars">
<EntityTypeMapping TypeName="IsTypeOf(Ef2PlaygroundModel_3.Car)">
<MappingFragment StoreEntitySet="Cars">
<ScalarProperty Name="Id" ColumnName="Id"/>
<ScalarProperty Name="Brand" ColumnName="Brand"/>
<ScalarProperty Name="Model" ColumnName="Model"/>
<ScalarProperty Name="ReleaseDate" ColumnName="ReleaseDate"/>
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<EntitySetMapping Name="Drivers">
<EntityTypeMapping TypeName="IsTypeOf(Ef2PlaygroundModel_3.Driver)">
<MappingFragment StoreEntitySet="Drivers">
<ScalarProperty Name="Id" ColumnName="Id"/>
<ScalarProperty Name="Name" ColumnName="Name"/>
</MappingFragment>
</EntityTypeMapping>
</EntitySetMapping>
<AssociationSetMapping Name="CarDriver" TypeName="Ef2PlaygroundModel_3.CarDriver" StoreEntitySet="CarDriver">
<EndProperty Name="Car">
<ScalarProperty Name="Id" ColumnName="Cars_Id"/>
</EndProperty>
<EndProperty Name="Driver">
<ScalarProperty Name="Id" ColumnName="Drivers_Id"/>
</EndProperty>
</AssociationSetMapping>
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<edmx:Designer xmlns="http://schemas.microsoft.com/ado/2008/10/edmx">
<edmx:Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly"/>
</DesignerInfoPropertySet>
</edmx:Connection>
<edmx:Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true"/>
<DesignerProperty Name="EnablePluralization" Value="False"/>
<DesignerProperty Name="CodeGenerationStrategy" Value="None"/>
</DesignerInfoPropertySet>
</edmx:Options>
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram Name="Ef2PlaygroundModel_3">
<EntityTypeShape EntityType="Ef2PlaygroundModel_3.Car" Width="1.5" PointX="3.25" PointY="1.625" Height="1.787985026041667"/>
<EntityTypeShape EntityType="Ef2PlaygroundModel_3.Driver" Width="1.5" PointX="5.375" PointY="1.625" Height="1.59568359375"/>
<AssociationConnector Association="Ef2PlaygroundModel_3.CarDriver">
<ConnectorPoint PointX="4.75" PointY="2.422841796875"/>
<ConnectorPoint PointX="5.375" PointY="2.422841796875"/>
</AssociationConnector>
</Diagram>
</edmx:Diagrams>
</edmx:Designer>
</edmx:Edmx>
app.config:
<configuration>
<connectionStrings>
<add
name="Ef2PlaygroundModel_3Container"
connectionString="metadata=res://*/Ef2PlaygroundModel_3.csdl|res://*/Ef2PlaygroundModel_3.ssdl|res://*/Ef2PlaygroundModel_3.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SqlExpress;Initial Catalog=Ef2PlaygroundModel_3;Integrated Security=True;MultipleActiveResultSets=True""
providerName="System.Data.EntityClient"
/>
</connectionStrings>
</configuration>
Ef2PlaygroundModel_3Pocos.cs:
using System;
using System.Collections.Generic;
using System.Data.Objects;
namespace EF2_Playground
{
public class Car
{
public Car()
{
Drivers = new List<Driver>();
}
public int Id { get; set; }
public string Brand { get; set; }
public string Model { get; set; }
public DateTime? ReleaseDate { get; set; }
public virtual List<Driver> Drivers { get; private set; }
}
public class Driver
{
public Driver()
{
Cars = new List<Car>();
}
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Car> Cars { get; private set; }
}
public class Ef2PlaygroundModel_3Container : ObjectContext
{
public Ef2PlaygroundModel_3Container()
: base("name=Ef2PlaygroundModel_3Container")
{
ContextOptions.LazyLoadingEnabled = true;
}
public IObjectSet<Car> Cars
{
get { return CreateObjectSet<Car>(); }
}
public IObjectSet<Driver> Drivers
{
get { return CreateObjectSet<Driver>(); }
}
}
}
Program.cs:
using System;
namespace EF2_Playground
{
class Program
{
static void Main(string[] args)
{
using (var ctx = new Ef2PlaygroundModel_3Container())
{
foreach (var driver in ctx.Drivers)
{
Console.WriteLine(driver.Name);
foreach (var car in driver.Cars)
{
Console.WriteLine(" drives a {0} - {1} (released on {2})", car.Brand, car.Model, car.ReleaseDate);
}
}
}
}
}
}
And finally Model1.edmx that breaks the whole thing as soon as i add it to the project:
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="2.0" xmlns:edmx="http://schemas.microsoft.com/ado/2008/10/edmx">
<!-- EF Runtime content -->
<edmx:Runtime>
<!-- SSDL content -->
<edmx:StorageModels>
<Schema xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl" Namespace="Model1.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2005">
<EntityContainer Name="Model1TargetContainer">
</EntityContainer>
</Schema>
</edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
<Schema xmlns="http://schemas.microsoft.com/ado/2008/09/edm" xmlns:cg="http://schemas.microsoft.com/ado/2006/04/codegeneration" xmlns:store="http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" Namespace="Model1" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation">
<EntityContainer Name="Model1Container" annotation:LazyLoadingEnabled="true">
</EntityContainer>
</Schema>
</edmx:ConceptualModels>
<!-- C-S mapping content -->
<edmx:Mappings>
<Mapping xmlns="http://schemas.microsoft.com/ado/2008/09/mapping/cs" Space="C-S">
<Alias Key="Model" Value="Model1"/>
<Alias Key="Target" Value="Model1.Store"/>
<EntityContainerMapping CdmEntityContainer="Model1Container" StorageEntityContainer="Model1TargetContainer">
</EntityContainerMapping>
</Mapping>
</edmx:Mappings>
</edmx:Runtime>
<!-- EF Designer content (DO NOT EDIT MANUALLY BELOW HERE) -->
<edmx:Designer xmlns="http://schemas.microsoft.com/ado/2008/10/edmx">
<edmx:Connection>
<DesignerInfoPropertySet>
<DesignerProperty Name="MetadataArtifactProcessing" Value="EmbedInOutputAssembly"/>
</DesignerInfoPropertySet>
</edmx:Connection>
<edmx:Options>
<DesignerInfoPropertySet>
<DesignerProperty Name="ValidateOnBuild" Value="true"/>
<DesignerProperty Name="EnablePluralization" Value="False"/>
</DesignerInfoPropertySet>
</edmx:Options>
<!-- Diagram content (shape and connector positions) -->
<edmx:Diagrams>
<Diagram Name="Model1"/>
</edmx:Diagrams>
</edmx:Designer>
</edmx:Edmx>
解决方案 Ok, i guess i've got it. I reduced the second model (the one that brakes the project) to the following:
Class1.cs
using System.Data.Objects.DataClasses;
[assembly: EdmSchemaAttribute()]
Bang! The well known exception appears.
As in so many cases, reading the documentation helps:
Mapping POCO entities is not supported if any mapping attributes are applied to custom data classes, including EdmSchemaAttribute at the assembly level.
Sure, i do not literally add mapping attributes to CUSTOM data classes but that doesn't matter for the EdmSchemaAttribute since that one lives on the assembly level.
Adding the second non-POCO model causes code generation resulting in a class that contains (at least) the EdmSchemaAttribute and that is not supported.
What i've learned: Don't mix POCO and non-POCO models in one assembly.
这篇关于EF4 POCO(不使用T4):无法为EntityType找到映射和元数据信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!