实体类型< class>不是当前上下文模型的一部分 [英] The entity type <class> is not part of the model for the current context

查看:168
本文介绍了实体类型< class>不是当前上下文模型的一部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一个MODEL的第一种方法。我已经进行了广泛的研究,没有提出答案。我已经尝试了以下链接中的所有建议:



这似乎是同样的问题,但没有解决



这些是我已经研究的链接,所以请不要回答----
EF 4.1 Code First error - 实体类型SomeType不是当前上下文的模型的一部分
实体类型不是模型的一部分,EF 5



这是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 Namespace =Insight_Model.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 =Insight_ModelStoreContainer>
< EntitySet Name =vwCompanyHeaderEntityType =Insight_Model.Store.vwCompanyHeaderstore:Type =Viewsstore:Schema =dbostore:Name =vwCompanyHeader>
< DefiningQuery> SELECT
[vwCompanyHeader]。[ID] AS [ID],
[vwCompanyHeader]。[Name] AS [Name],
[vwCompanyHeader] [创建者] AS [创建者],
[vwCompanyHeader]。[创建] AS [创建],
[vwCompanyHeader]。[修饰符] AS [修饰符],
[vwCompanyHeader]。[修改] AS [修改]
FROM [dbo]。[vwCompanyHeader] AS [vwCompanyHeader]< / DefiningQuery>
< / EntitySet>
< EntitySet Name =vwWorkOrderHeaderEntityType =Insight_Model.Store.vwWorkOrderHeaderstore:Type =Viewsstore:Schema =dbostore:Name =vwWorkOrderHeader>
< DefiningQuery> SELECT
[vwWorkOrderHeader]。[ID] AS [ID],
[vwWorkOrderHeader]。[Active] AS [Active],
[vwWorkOrderHeader]名称] AS [名称],
[vwWorkOrderHeader]。[创建者] AS [创建者],
[vwWorkOrderHeader]。[创建] AS [创建],
[vwWorkOrderHeader] AS [Modifier],
[vwWorkOrderHeader]。[修改] AS [修改],
[vwWorkOrderHeader]。[Leader] AS [Leader],
[vwWorkOrderHeader]。[LeadTakenDate] AS [ LeadTakeDate],
[vwWorkOrderHeader]。[ProjectID] AS [ProjectID],
[vwWorkOrderHeader]。[ProjectName] AS [ProjectName],
[vwWorkOrderHeader]。[WorkOrderStatus] AS [WorkOrderStatus] ,
[vwWorkOrderHeader]。[WorkOrderSubStatus] AS [WorkOrderSubStatus],
[vwWorkOrderHeader]。[WorkOrderType] AS [WorkOrderType],
[vwWorkOrderHeader]。[WorkOrderSubType] AS [WorkOrderSubType],
[vwWorkOrderHeader]。[WorkOrderPriority] AS [WorkOrderPriority],
[vwWorkOrderHeader]。[Re fNumber] AS [RefNumber],
[vwWorkOrderHeader]。[请求] AS [请求]
FROM [dbo]。[vwWorkOrderHeader] AS [vwWorkOrderHeader]< / DefiningQuery>
< / EntitySet>
< / EntityContainer>
< EntityType Name =vwCompanyHeader>
< Key>
< PropertyRef Name =ID/>
< / Key>
< Property Name =IDType =intNullable =false/>
< Property Name =NameType =varcharNullable =falseMaxLength =50/>
< Property Name =ActiveType =bitNullable =false/>
< Property Name =CreatorType =varcharNullable =falseMaxLength =51/>
< Property Name =CreatedType =dateNullable =false/>
< Property Name =ModifierType =varcharNullable =falseMaxLength =51/>
< Property Name =ModifiedType =dateNullable =false/>
< / EntityType>
< EntityType Name =vwWorkOrderHeader>
< Key>
< PropertyRef Name =ID/>
< / Key>
< Property Name =IDType =intNullable =false/>
< Property Name =ActiveType =bitNullable =false/>
< Property Name =NameType =varcharNullable =falseMaxLength =15/>
< Property Name =CreatorType =varcharNullable =falseMaxLength =51/>
< Property Name =CreatedType =dateNullable =false/>
< Property Name =ModifierType =varcharNullable =falseMaxLength =51/>
< Property Name =ModifiedType =dateNullable =false/>
< Property Name =LeaderType =varcharNullable =falseMaxLength =51/>
< Property Name =LeadTakenDateType =dateNullable =false/>
< Property Name =ProjectIDType =intNullable =false/>
< Property Name =ProjectNameType =varcharNullable =falseMaxLength =15/>
< Property Name =WorkOrderStatusType =varcharNullable =falseMaxLength =35/>
< Property Name =WorkOrderSubStatusType =varcharNullable =falseMaxLength =35/>
< Property Name =WorkOrderTypeType =varcharNullable =falseMaxLength =35/>
< Property Name =WorkOrderSubTypeType =varcharNullable =falseMaxLength =35/>
< Property Name =WorkOrderPriorityType =varcharNullable =falseMaxLength =35/>
< Property Name =RefNumberType =varcharNullable =falseMaxLength =25/>
< Property Name =RequestType =varcharNullable =falseMaxLength =1500/>
< / EntityType>
< / Schema>< / edmx:StorageModels>
<! - CSDL内容 - >
< edmx:ConceptualModels>
< Schema Namespace =Insight_ModelAlias =Selfxmlns:annotation =http://schemas.microsoft.com/ado/2009/02/edm/annotationxmlns =http:// schemas .microsoft.com / ADO / 2008/09 / EDM>
< EntityContainer Name =Insight_Entities注释:LazyLoadingEnabled =false>
< EntitySet Name =CompanyHeadersEntityType =Insight_Model.CompanyHeader/>
< EntitySet Name =WorkOrderHeadersEntityType =Insight_Model.WorkOrderHeader/>
< / EntityContainer>
< EntityType Name =CompanyHeader>
< Key>
< PropertyRef Name =ID/>
< / Key>
< Property Type =StringName =NameMaxLength =50FixedLength =falseUnicode =falseNullable =false/>
< Property Type =BooleanName =ActiveNullable =false/>
< Property Type =StringName =CreatorNullable =falseMaxLength =51FixedLength =falseUnicode =false/>
< Property Type =DateTimeName =CreatedNullable =false/>
< Property Type =StringName =ModifierNullable =falseMaxLength =51FixedLength =falseUnicode =false/>
< Property Type =DateTimeName =ModifiedNullable =false/>
<属性类型=Int32Name =IDNullable =false/>
< / EntityType>
< EntityType Name =WorkOrderHeader>
< Key>
< PropertyRef Name =ID/>
< / Key>
<属性类型=Int32Name =IDNullable =false/>
< Property Type =BooleanName =ActiveNullable =false/>
< Property Type =StringName =NameNullable =falseMaxLength =15FixedLength =falseUnicode =false/>
< Property Type =StringName =CreatorNullable =falseMaxLength =51FixedLength =falseUnicode =false/>
< Property Type =DateTimeName =CreatedNullable =false/>
< Property Type =StringName =ModifierNullable =falseMaxLength =51FixedLength =falseUnicode =false/>
< Property Type =DateTimeName =ModifiedNullable =false/>
< Property Type =StringName =LeaderNullable =falseMaxLength =51FixedLength =falseUnicode =false/>
< Property Type =DateTimeName =LeadTakenDateNullable =false/>
< Property Type =Int32Name =ProjectIDNullable =false/>
< Property Type =StringName =ProjectNameNullable =falseMaxLength =15FixedLength =falseUnicode =false/>
< Property Type =StringName =WorkOrderStatusNullable =falseMaxLength =35FixedLength =falseUnicode =false/>
< Property Type =StringName =WorkOrderSubStatusNullable =falseMaxLength =35FixedLength =falseUnicode =false/>
< Property Type =StringName =WorkOrderTypeNullable =falseMaxLength =35FixedLength =falseUnicode =false/>
< Property Type =StringName =WorkOrderSubTypeNullable =falseMaxLength =35FixedLength =falseUnicode =false/>
< Property Type =StringName =WorkOrderPriorityNullable =falseMaxLength =35FixedLength =falseUnicode =false/>
< Property Type =StringName =RefNumberMaxLength =25Nullable =falseFixedLength =falseUnicode =false/>
< Property Type =StringName =RequestNullable =falseMaxLength =1500FixedLength =falseUnicode =false/>
< / EntityType>
< / Schema>
< / edmx:ConceptualModels>
<! - C-S映射内容 - >
< edmx:映射>
< Mapping Space =C-Sxmlns =http://schemas.microsoft.com/ado/2008/09/mapping/cs>
< EntityContainerMapping StorageEntityContainer =Insight_ModelStoreContainerCdmEntityContainer =Insight_Entities>
< EntitySetMapping Name =CompanyHeaders>
< EntityTypeMapping TypeName =Insight_Model.CompanyHeader>
< MappingFragment StoreEntitySet =vwCompanyHeader>
< ScalarProperty Name =IDColumnName =ID/>
< ScalarProperty Name =ModifiedColumnName =Modified/>
< ScalarProperty Name =ModifierColumnName =Modifier/>
< ScalarProperty Name =CreatedColumnName =Created/>
< ScalarProperty Name =CreatorColumnName =Creator/>
< ScalarProperty Name =ActiveColumnName =Active/>
< ScalarProperty Name =NameColumnName =Name/>
< / MappingFragment>
< / EntityTypeMapping>
< / EntitySetMapping>
< EntitySetMapping Name =WorkOrderHeaders>
< EntityTypeMapping TypeName =Insight_Model.WorkOrderHeader>
< MappingFragment StoreEntitySet =vwWorkOrderHeader>
< ScalarProperty Name =RequestColumnName =Request/>
< ScalarProperty Name =RefNumberColumnName =RefNumber/>
< ScalarProperty Name =WorkOrderPriorityColumnName =WorkOrderPriority/>
< ScalarProperty Name =WorkOrderSubTypeColumnName =WorkOrderSubType/>
< ScalarProperty Name =WorkOrderTypeColumnName =WorkOrderType/>
< ScalarProperty Name =WorkOrderSubStatusColumnName =WorkOrderSubStatus/>
< ScalarProperty Name =WorkOrderStatusColumnName =WorkOrderStatus/>
< ScalarProperty Name =ProjectNameColumnName =ProjectName/>
< ScalarProperty Name =ProjectIDColumnName =ProjectID/>
< ScalarProperty Name =LeadTakenDateColumnName =LeadTakenDate/>
< ScalarProperty Name =LeaderColumnName =Leader/>
< ScalarProperty Name =ModifiedColumnName =Modified/>
< ScalarProperty Name =ModifierColumnName =Modifier/>
< ScalarProperty Name =CreatedColumnName =Created/>
< ScalarProperty Name =CreatorColumnName =Creator/>
< ScalarProperty Name =NameColumnName =Name/>
< ScalarProperty Name =ActiveColumnName =Active/>
< ScalarProperty Name =IDColumnName =ID/>
< / MappingFragment>
< / EntityTypeMapping>
< / EntitySetMapping>
< / EntityContainerMapping>
< / Mapping>
< / edmx:映射>



存储库代码: p>

 导入System.Linq.Expressions 
导入System.Data.Entity.Infrastructure
导入System.Data.Entity

public class Repository(Of T as {Class,IEntity})
实现IRepository(Of T)

#Region属性
Private objectContext作为IDatabaseContext
受保护的对象集作为IDbSet(Of T)
#End Region

Public Sub New(objContext As IDatabaseContext)
objectContext = objContext
objectSet = objectContext.Set(Of T)()
End Sub
公共函数FindAll()作为IQueryable(Of T)实现IRepository(Of T).FindAll
返回objectSet
结束函数

公共函数FindWhere(谓词As Expressions.Expression(Of System.Func(Of T,Boolean)))As System.Linq.IQueryable(Of T)实现Interfaces.IRepository(Of T).FindWhere
返回objectSet.Where(谓词)
结束函数

公共功能FindById(id As Integer)As T实现IRepository(Of T).FindById
返回objectSet.Single(函数(o)o.ID = id)
结束函数

public Sub Add(newEntity As T)实现IRepository(Of T).Add
objectSet.Add(newEntity)
End Sub

公共子删除(实体为T)实现IRepository (Of T).R​​emove
objectSet.Remove(entity)
End Sub

公共函数计数(可选谓词As Expression(Of Func(Of T,Boolean))= Nothing )作为整数实现IRepository(Of T).Count
返回If((谓词不是),objectSet.Count,objectSet.Where(谓词).Count)
结束函数

公共函数存在(可选谓词As Expression(Of Func(Of T,Boolean))= Nothing)作为Boolean实现IRepository(Of T).Exist
返回If((谓词Is Nothing),objectSet.Any,objectSet .Where(谓词).Any)
结束函数
结束类

DatabaseContext代码:

 导入System.Data.Entity 
导入Insight.DataLayer.Interfaces
导入System.Data.Objects
导入System.Configuration

公共类DatabaseContext
继承DbContext
实现IDatabaseContext

Const defaultConnectStringName =Insight_Entities

Public Sub New()
Me.New (ConfigurationManager.ConnectionStrings(defaultConnectStringName).ConnectionString)
End Sub
Public Sub New(connectionString As String)
MyBase.New(connectionString)
MyBase.Configuration.LazyLoadingEnabled = False
MyBase.Configuration.ProxyCreationEnabled = False
End Sub
公共重载Sub SaveChanges()实现Interfaces.IDatabaseContext.SaveChanges
MyBase.SaveChanges()
End Sub

公共重载函数[Set](Of As As Class)()As System.Data.Entity.IDbSet(Of T)实现Interfaces.IDatabaseContext.Set
返回MyBase.Set(Of T)( )
结束函数
结束类

而且2类文件:



WorkOrderHeader:

 导入System.ComponentModel.DataAnnotations 
导入System.Collections.ObjectModel
导入System.Runtime .Serialization
导入System.Data.Services.Common

部分公共类WorkOrderHeader
继承DataTransferObjectHeaderBase

Public Sub New()

End Sub(iID As Integer,sName As String,bActive As Boolean,sCreator As String,dtCreated As DateTime,sModifier As String,dtModified As DateTime,sLeader As String,dtLeadTaken As Date,iProjectID作为Integer,sProjectName As String,sWorkOrderStatus As String,sWorkOrderSubStatus As String,sWorkOrderType As String,sWorkOrderSubType As String,sWorkOrderPriority As String,sRequest As String)
Me.New(iID,sName,bActive,sCreator,dtCreated,sModifier ,dtModified,sLeader,dtLeadTaken,iProjectID,sProjectName,sWorkOrderStatus,sWorkOrder SubStatus,sWorkOrderType,sWorkOrderSubType,sWorkOrderPriority,,sRequest)
End Sub
Public Sub New(iID As Integer,sName As String,bActive As Boolean,sCreator As String,dtCreated As DateTime,sModifier As String ,dtModified As DateTime,sLeader As String,dtLeadTaken As Date,iProjectID As Integer,sProjectName As String,sWorkOrderStatus As String,sWorkOrderSubStatus As String,sWorkOrderType As String,sWorkOrderSubType As String,sWorkOrderPriority As String,sRefNumber As String,sRequest As String)
ID = iID
名称= sName
活动= bActive
创建者= sCreator
创建= dtCreated
修饰符= sModifier
修改= dtModified
Leader = sLeader
LeadTaken = dtLeadTaken
ProjectID = iProjectID
ProjectName = sProjectName
WorkOrderStatus = sWorkOrderStatus
WorkOrderSubStatus = sWorkOrderSubStatus
WorkOrderType = sWorkOrderType
WorkOrderSubType = sWorkOrderSubType
WorkOrderPriority = sWorkOrderPriority
RefNumber = sRefNumber
Request = sRequest
End Sub

< DataMember()> _
公共财产负责人()As String
获取
返回_leader
结束获取
设置(值As String)
_leader = value
结束集
结束属性
私有_leader As String

< DataMember()> _
公共财产LeadTaken()作为日期
获取
返回_leadTaken
结束获取
设置(值作为日期)
_leadTaken = value
结束集
结束属性
私人_leadTaken为日期

< DataMember()> _
公共属性ProjectID()作为Int32
获取
返回_projectID
结束Get
Set(value As Int32)
If(_projectID<>值)然后
_projectID = value
End If
结束集
结束属性
私有_projectID As Int32

< DataMember()> ; _
公共属性ProjectName()As String
获取
返回_projectName
结束Get
Set(value As String)
If(_projectName&值)然后
_projectName = value
End If
结束集
结束属性
私有_projectName As String

< DataMember()> ; _
公共属性WorkOrderStatus()As String
获取
返回_workOrderStatus
结束Get
Set(value As String)
_workOrderStatus = value
结束集
结束属性
私有_workOrderStatus As String

< DataMember()> _
公共属性WorkOrderSubStatus()As String
获取
返回_workOrderSubStatus
结束Get
Set(value As String)
_workOrderSubStatus = value
结束集
结束属性
私有_workOrderSubStatus As String

< DataMember()> _
公共属性WorkOrderType()As String
获取
返回_workOrderType
结束Get
Set(value As String)
_workOrderType = value
结束集
结束属性
私有_workOrderType As String

< DataMember()> _
公共属性WorkOrderSubType()As String
获取
返回_workOrderSubType
结束Get
Set(value As String)
_workOrderSubType = value
结束集
结束属性
私有_workOrderSubType As String

< DataMember()> _
公共属性WorkOrderPriority()As String
获取
返回_workOrderPriority
结束Get
Set(value As String)
_workOrderPriority = value
结束集
结束属性
私有_workOrderPriority As String

< DataMember()> _
公共属性RefNumber()As String
获取
返回_refNumber
结束Get
Set(value As String)
_refNumber = value
结束集
结束属性
私有_refNumber As String

< DataMember()> _
公共属性Request()As String
获取
返回_request
结束Get
Set(value As String)
_request = value
结束集
结束属性
私有_request As String

结束类
#End区域

CompanyHeader:

 导入System.ComponentModel.DataAnnotations 
导入系统.Collections.ObjectModel
导入System.Runtime.Serialization
导入System.Data.Services.Common


< DataServiceKey(ID)> _
< MetadataTypeAttribute(GetType(CompanyHeader.CompanyHeaderMetadata))> _
部分公共类CompanyHeader
继承DataTransferObjectHeaderBase

朋友NotInheritable类CompanyHeaderMetadata

'元数据类不是要实例化的。
Private Sub New()
MyBase.New()
End Sub

< DataMember()> _
公共属性Active As Boolean

< DataMember()> _
公共属性ID为整数

< DataMember()> _
公共属性创建为DateTime

< DataMember()> _
公共属性创建者As String

< DataMember()> _
公共属性修改为DateTime

< DataMember()> _
公共属性修饰符作为字符串

< DataMember()> _
公共属性名称作为字符串
结束类

公共子新()

End Sub
公共子新(iID为整数) ,sName As String,bActive As Boolean,sCreator As String,dtCreated As DateTime,sModifier As String,dtModified As DateTime)
ID = iID
Name = sName
Active = bActive
创建者= sCreator
创建= dtCreated
修饰符= sModifier
修改= dtModified
结束Sub
结束类
 < TestMethod()> _ 
Public Sub WorkOrderServiceTests_TestConnectivityThruService5()
Dim woService As New DatabaseContext
Dim woHeaders = New Repository(Of WorkOrderHeader)(woService)
Dim woTests = New Repository(Of WorkOrderTest)(woService )
Dim coHeaders = New Repository(Of CompanyHeader)(woService)
Assert.IsTrue(woHeaders.Count<> 0)
End Sub

我已经尝试解决问题:



1)检查的数据库 - 两个查询正确返回数据。
select * from vwWorkOrderHeader
select * from vwCompanyHeader



2)从EDMX删除WorkOrderHeader,然后从数据库重新创建它。



3)取出DBContext,确保服务查询不是有趣的事情。这样可以正确地返回对象,所以这意味着它是在上下文级别或以下。



4)通过这两个测试,确保它们使用相同的方法建立上下文 - Thy do。



4)通过这两个测试,确保他们使用相同的方法来构建存储库 - Thy do。



5)唯一的区别是DatabaseContext的以下功能:

 公共重载函数[ Set(T as Class)()As System.Data.Entity.IDbSet(Of T)实现Interfaces.IDatabaseContext.Set 
返回MyBase.Set(Of T)()
结束函数

WorkOrderHeader代码在MyBase.Set(Of T)()

  {System.Data.Entity.DbSet(Of Insight.Model.WorkOrderHeader)} System.Data.Entity.DbSet(Insight.Model。 WorkOrderHeader)

CompanyHeader代码在手表中具有以下内容MyBase.Set(Of T)()

  {SELECT [Extent1]。[Name] AS [Name],[Extent1] 。[活动] AS [活动],[Extent1]。[创建者] AS [创建者],[Extent1]。[创建] AS [创建],[Extent1]。[修饰符] AS [修饰符],[Extent1] [名称] AS [名称],[vwCompanyHeader]。[ID] AS [ID] AS [ID] [创建者] AS [创建者],[vwCompanyHeader]。[创建] AS [创建],[vwCompanyHeader]。[修饰符] AS [修饰符],[vwCompanyHeader]。[修改] AS [修改] FROM [dbo]。[vwCompanyHeader] AS [vwCompanyHeader])AS [Extent1]} System.Data.Entity.DbSet(Insight.Model.CompanyHeader)
pre>

我完全失去了这一个,进入我第三天工作同样的问题。我希望对这个问题的一些新鲜的眼睛可能会看到一个错误,我已经提出或指出我在测试我没有想到的问题的方向。



更新:



我删除了服务代码,以确保它是DBContext中的东西。我把这个服务从公式中分离出来,这样只有存储库被使用,并且都使用相同的DatabaseContext,所以它不能与连接字符串有关。我验证了在Insight_Model / EntityContainer中的模型浏览器中:Insight_Entities / Entity Sets / WorkOrderHeaders存在,InsightModel / Entity Types / WorkOrderHeader中存在。几乎看起来好像DatabaseContext甚至没有试图查询实体集的概念模型。

解决方案

After 3( 4)天(取决于你如何查看日子,我分开几天,当我睡觉,而不一定当太阳下降/出来),我找到答案。在上面的EDMX文件中,我有一个名为LeadTakenDate的列,在WorkOrderHeader类中,我使用了字段名称LeadTaken。这是我的一个愚蠢的错误。



这可能如何受益?以下是我如何解决问题:



首先,我通过MOQing部分将问题解决到一个区域,看看问题所在的兔子洞有多远。一旦我想出了DatabaseContext中的问题,我写了一个创建一个工作和非工作用例的测试用例。这样就分离了这个问题,并允许我测试理论来更快地修复它。在尝试使用EF 5.x持久性无知poco生成器之前,我尝试了一千种不同的东西。我注释掉了我在WorkOrderHeader类中的所有代码,并复制了生成的代码。重新运行我的测试,并且他们工作,所以我开始取消注释我的属性,并注释掉生成的代码,然后重新运行我的测试,直到我打到相应的属性。 p>

错误信息足够让人很难麻烦拍摄。


This is a MODEL first approach. I have already researched this extensiely and have not come up with an answer. I have tried all the suggestions at the following links:

This appears to be the same problem but with no resolution The entity type <classname> is not part of the model for the current context

These are the links I have already researched so please don't answer as duplicate of ---- EF 4.1 Code First error - The entity type SomeType is not part of the model for the current context The entity type is not part of the model, EF 5

Here is the EDMX (Abbreviated for brevity):

<?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="Insight_Model.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="Insight_ModelStoreContainer">
      <EntitySet Name="vwCompanyHeader" EntityType="Insight_Model.Store.vwCompanyHeader" store:Type="Views" store:Schema="dbo" store:Name="vwCompanyHeader">
        <DefiningQuery>SELECT 
  [vwCompanyHeader].[ID] AS [ID], 
  [vwCompanyHeader].[Name] AS [Name], 
  [vwCompanyHeader].[Active] AS [Active], 
  [vwCompanyHeader].[Creator] AS [Creator], 
  [vwCompanyHeader].[Created] AS [Created], 
  [vwCompanyHeader].[Modifier] AS [Modifier], 
  [vwCompanyHeader].[Modified] AS [Modified]
  FROM [dbo].[vwCompanyHeader] AS [vwCompanyHeader]</DefiningQuery>
      </EntitySet>
      <EntitySet Name="vwWorkOrderHeader" EntityType="Insight_Model.Store.vwWorkOrderHeader" store:Type="Views" store:Schema="dbo" store:Name="vwWorkOrderHeader">
        <DefiningQuery>SELECT 
  [vwWorkOrderHeader].[ID] AS [ID], 
  [vwWorkOrderHeader].[Active] AS [Active], 
  [vwWorkOrderHeader].[Name] AS [Name], 
  [vwWorkOrderHeader].[Creator] AS [Creator], 
  [vwWorkOrderHeader].[Created] AS [Created], 
  [vwWorkOrderHeader].[Modifier] AS [Modifier], 
  [vwWorkOrderHeader].[Modified] AS [Modified], 
  [vwWorkOrderHeader].[Leader] AS [Leader], 
  [vwWorkOrderHeader].[LeadTakenDate] AS [LeadTakenDate], 
  [vwWorkOrderHeader].[ProjectID] AS [ProjectID], 
  [vwWorkOrderHeader].[ProjectName] AS [ProjectName], 
  [vwWorkOrderHeader].[WorkOrderStatus] AS [WorkOrderStatus], 
  [vwWorkOrderHeader].[WorkOrderSubStatus] AS [WorkOrderSubStatus], 
  [vwWorkOrderHeader].[WorkOrderType] AS [WorkOrderType], 
  [vwWorkOrderHeader].[WorkOrderSubType] AS [WorkOrderSubType], 
  [vwWorkOrderHeader].[WorkOrderPriority] AS [WorkOrderPriority], 
  [vwWorkOrderHeader].[RefNumber] AS [RefNumber], 
  [vwWorkOrderHeader].[Request] AS [Request]
  FROM [dbo].[vwWorkOrderHeader] AS [vwWorkOrderHeader]</DefiningQuery>
      </EntitySet>
    </EntityContainer>
    <EntityType Name="vwCompanyHeader">
      <Key>
        <PropertyRef Name="ID" />
      </Key>
      <Property Name="ID" Type="int" Nullable="false" />
      <Property Name="Name" Type="varchar" Nullable="false" MaxLength="50" />
      <Property Name="Active" Type="bit" Nullable="false" />
      <Property Name="Creator" Type="varchar" Nullable="false" MaxLength="51" />
      <Property Name="Created" Type="date" Nullable="false" />
      <Property Name="Modifier" Type="varchar" Nullable="false" MaxLength="51" />
      <Property Name="Modified" Type="date" Nullable="false" />
    </EntityType>
    <EntityType Name="vwWorkOrderHeader">
      <Key>
        <PropertyRef Name="ID" />
      </Key>
      <Property Name="ID" Type="int" Nullable="false" />
      <Property Name="Active" Type="bit" Nullable="false" />
      <Property Name="Name" Type="varchar" Nullable="false" MaxLength="15" />
      <Property Name="Creator" Type="varchar" Nullable="false" MaxLength="51" />
      <Property Name="Created" Type="date" Nullable="false" />
      <Property Name="Modifier" Type="varchar" Nullable="false" MaxLength="51" />
      <Property Name="Modified" Type="date" Nullable="false" />
      <Property Name="Leader" Type="varchar" Nullable="false" MaxLength="51" />
      <Property Name="LeadTakenDate" Type="date" Nullable="false" />
      <Property Name="ProjectID" Type="int" Nullable="false" />
      <Property Name="ProjectName" Type="varchar" Nullable="false" MaxLength="15" />
      <Property Name="WorkOrderStatus" Type="varchar" Nullable="false" MaxLength="35" />
      <Property Name="WorkOrderSubStatus" Type="varchar" Nullable="false" MaxLength="35" />
      <Property Name="WorkOrderType" Type="varchar" Nullable="false" MaxLength="35" />
      <Property Name="WorkOrderSubType" Type="varchar" Nullable="false" MaxLength="35" />
      <Property Name="WorkOrderPriority" Type="varchar" Nullable="false" MaxLength="35" />
      <Property Name="RefNumber" Type="varchar" Nullable="false" MaxLength="25" />
      <Property Name="Request" Type="varchar" Nullable="false" MaxLength="1500" />
    </EntityType>
  </Schema></edmx:StorageModels>
<!-- CSDL content -->
<edmx:ConceptualModels>
  <Schema Namespace="Insight_Model" Alias="Self" xmlns:annotation="http://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="http://schemas.microsoft.com/ado/2008/09/edm">
    <EntityContainer Name="Insight_Entities" annotation:LazyLoadingEnabled="false">
      <EntitySet Name="CompanyHeaders" EntityType="Insight_Model.CompanyHeader" />
      <EntitySet Name="WorkOrderHeaders" EntityType="Insight_Model.WorkOrderHeader" />
    </EntityContainer>
    <EntityType Name="CompanyHeader">
      <Key>
        <PropertyRef Name="ID" />
      </Key>
      <Property Type="String" Name="Name" MaxLength="50" FixedLength="false" Unicode="false" Nullable="false" />
      <Property Type="Boolean" Name="Active" Nullable="false" />
      <Property Type="String" Name="Creator" Nullable="false" MaxLength="51" FixedLength="false" Unicode="false" />
      <Property Type="DateTime" Name="Created" Nullable="false" />
      <Property Type="String" Name="Modifier" Nullable="false" MaxLength="51" FixedLength="false" Unicode="false" />
      <Property Type="DateTime" Name="Modified" Nullable="false" />
      <Property Type="Int32" Name="ID" Nullable="false" />
    </EntityType>
    <EntityType Name="WorkOrderHeader">
      <Key>
        <PropertyRef Name="ID" />
      </Key>
      <Property Type="Int32" Name="ID" Nullable="false" />
      <Property Type="Boolean" Name="Active" Nullable="false" />
      <Property Type="String" Name="Name" Nullable="false" MaxLength="15" FixedLength="false" Unicode="false" />
      <Property Type="String" Name="Creator" Nullable="false" MaxLength="51" FixedLength="false" Unicode="false" />
      <Property Type="DateTime" Name="Created" Nullable="false" />
      <Property Type="String" Name="Modifier" Nullable="false" MaxLength="51" FixedLength="false" Unicode="false" />
      <Property Type="DateTime" Name="Modified" Nullable="false" />
      <Property Type="String" Name="Leader" Nullable="false" MaxLength="51" FixedLength="false" Unicode="false" />
      <Property Type="DateTime" Name="LeadTakenDate" Nullable="false" />
      <Property Type="Int32" Name="ProjectID" Nullable="false" />
      <Property Type="String" Name="ProjectName" Nullable="false" MaxLength="15" FixedLength="false" Unicode="false" />
      <Property Type="String" Name="WorkOrderStatus" Nullable="false" MaxLength="35" FixedLength="false" Unicode="false" />
      <Property Type="String" Name="WorkOrderSubStatus" Nullable="false" MaxLength="35" FixedLength="false" Unicode="false" />
      <Property Type="String" Name="WorkOrderType" Nullable="false" MaxLength="35" FixedLength="false" Unicode="false" />
      <Property Type="String" Name="WorkOrderSubType" Nullable="false" MaxLength="35" FixedLength="false" Unicode="false" />
      <Property Type="String" Name="WorkOrderPriority" Nullable="false" MaxLength="35" FixedLength="false" Unicode="false" />
      <Property Type="String" Name="RefNumber" MaxLength="25" Nullable="false" FixedLength="false" Unicode="false" />
      <Property Type="String" Name="Request" Nullable="false" MaxLength="1500" FixedLength="false" Unicode="false" />
    </EntityType>
    </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="Insight_ModelStoreContainer" CdmEntityContainer="Insight_Entities">
      <EntitySetMapping Name="CompanyHeaders">
        <EntityTypeMapping TypeName="Insight_Model.CompanyHeader">
          <MappingFragment StoreEntitySet="vwCompanyHeader">
            <ScalarProperty Name="ID" ColumnName="ID" />
            <ScalarProperty Name="Modified" ColumnName="Modified" />
            <ScalarProperty Name="Modifier" ColumnName="Modifier" />
            <ScalarProperty Name="Created" ColumnName="Created" />
            <ScalarProperty Name="Creator" ColumnName="Creator" />
            <ScalarProperty Name="Active" ColumnName="Active" />
            <ScalarProperty Name="Name" ColumnName="Name" />
          </MappingFragment>
        </EntityTypeMapping>
      </EntitySetMapping>
      <EntitySetMapping Name="WorkOrderHeaders">
        <EntityTypeMapping TypeName="Insight_Model.WorkOrderHeader">
          <MappingFragment StoreEntitySet="vwWorkOrderHeader">
            <ScalarProperty Name="Request" ColumnName="Request" />
            <ScalarProperty Name="RefNumber" ColumnName="RefNumber" />
            <ScalarProperty Name="WorkOrderPriority" ColumnName="WorkOrderPriority" />
            <ScalarProperty Name="WorkOrderSubType" ColumnName="WorkOrderSubType" />
            <ScalarProperty Name="WorkOrderType" ColumnName="WorkOrderType" />
            <ScalarProperty Name="WorkOrderSubStatus" ColumnName="WorkOrderSubStatus" />
            <ScalarProperty Name="WorkOrderStatus" ColumnName="WorkOrderStatus" />
            <ScalarProperty Name="ProjectName" ColumnName="ProjectName" />
            <ScalarProperty Name="ProjectID" ColumnName="ProjectID" />
            <ScalarProperty Name="LeadTakenDate" ColumnName="LeadTakenDate" />
            <ScalarProperty Name="Leader" ColumnName="Leader" />
            <ScalarProperty Name="Modified" ColumnName="Modified" />
            <ScalarProperty Name="Modifier" ColumnName="Modifier" />
            <ScalarProperty Name="Created" ColumnName="Created" />
            <ScalarProperty Name="Creator" ColumnName="Creator" />
            <ScalarProperty Name="Name" ColumnName="Name" />
            <ScalarProperty Name="Active" ColumnName="Active" />
            <ScalarProperty Name="ID" ColumnName="ID" />
          </MappingFragment>
        </EntityTypeMapping>
      </EntitySetMapping>
      </EntityContainerMapping>
  </Mapping>
</edmx:Mappings>

The repository code:

Imports System.Linq.Expressions
Imports System.Data.Entity.Infrastructure
Imports System.Data.Entity

Public Class Repository(Of T As {Class, IEntity})
Implements IRepository(Of T)

#Region "Attributes"
Private objectContext As IDatabaseContext
Protected objectSet As IDbSet(Of T)
#End Region

Public Sub New(objContext As IDatabaseContext)
    objectContext = objContext
    objectSet = objectContext.Set(Of T)()
End Sub
Public Function FindAll() As IQueryable(Of T) Implements IRepository(Of T).FindAll
    Return objectSet
End Function

Public Function FindWhere(predicate As Expressions.Expression(Of System.Func(Of T, Boolean))) As System.Linq.IQueryable(Of T) Implements Interfaces.IRepository(Of T).FindWhere
    Return objectSet.Where(predicate)
End Function

Public Function FindById(id As Integer) As T Implements IRepository(Of T).FindById
    Return objectSet.Single(Function(o) o.ID = id)
End Function

Public Sub Add(newEntity As T) Implements IRepository(Of T).Add
    objectSet.Add(newEntity)
End Sub

Public Sub Remove(entity As T) Implements IRepository(Of T).Remove
    objectSet.Remove(entity)
End Sub

Public Function Count(Optional predicate As Expression(Of Func(Of T, Boolean)) = Nothing) As Integer Implements IRepository(Of T).Count
    Return If((predicate Is Nothing), objectSet.Count, objectSet.Where(predicate).Count)
End Function

Public Function Exist(Optional predicate As Expression(Of Func(Of T, Boolean)) = Nothing) As Boolean Implements IRepository(Of T).Exist
    Return If((predicate Is Nothing), objectSet.Any, objectSet.Where(predicate).Any)
End Function
End Class

The DatabaseContext code:

Imports System.Data.Entity
Imports Insight.DataLayer.Interfaces
Imports System.Data.Objects
Imports System.Configuration

Public Class DatabaseContext
Inherits DbContext
Implements IDatabaseContext

Const defaultConnectStringName = "Insight_Entities"

Public Sub New()
     Me.New(ConfigurationManager.ConnectionStrings(defaultConnectStringName).ConnectionString)
End Sub
Public Sub New(connectionString As String)
    MyBase.New(connectionString)
    MyBase.Configuration.LazyLoadingEnabled = False
    MyBase.Configuration.ProxyCreationEnabled = False
End Sub
Public Overloads Sub SaveChanges() Implements Interfaces.IDatabaseContext.SaveChanges
    MyBase.SaveChanges()
End Sub

Public Overloads Function [Set](Of T As Class)() As System.Data.Entity.IDbSet(Of T) Implements Interfaces.IDatabaseContext.Set
    Return MyBase.Set(Of T)()
End Function
End Class

And the 2 class files:

WorkOrderHeader:

Imports System.ComponentModel.DataAnnotations
Imports System.Collections.ObjectModel
Imports System.Runtime.Serialization
Imports System.Data.Services.Common

Partial Public Class WorkOrderHeader
Inherits DataTransferObjectHeaderBase

Public Sub New()

End Sub
Public Sub New(iID As Integer, sName As String, bActive As Boolean, sCreator As String, dtCreated As DateTime, sModifier As String, dtModified As DateTime, sLeader As String, dtLeadTaken As Date, iProjectID As Integer, sProjectName As String, sWorkOrderStatus As String, sWorkOrderSubStatus As String, sWorkOrderType As String, sWorkOrderSubType As String, sWorkOrderPriority As String, sRequest As String)
    Me.New(iID, sName, bActive, sCreator, dtCreated, sModifier, dtModified, sLeader, dtLeadTaken, iProjectID, sProjectName, sWorkOrderStatus, sWorkOrderSubStatus, sWorkOrderType, sWorkOrderSubType, sWorkOrderPriority, "", sRequest)
End Sub
Public Sub New(iID As Integer, sName As String, bActive As Boolean, sCreator As String, dtCreated As DateTime, sModifier As String, dtModified As DateTime, sLeader As String, dtLeadTaken As Date, iProjectID As Integer, sProjectName As String, sWorkOrderStatus As String, sWorkOrderSubStatus As String, sWorkOrderType As String, sWorkOrderSubType As String, sWorkOrderPriority As String, sRefNumber As String, sRequest As String)
    ID = iID
    Name = sName
    Active = bActive
    Creator = sCreator
    Created = dtCreated
    Modifier = sModifier
    Modified = dtModified
    Leader = sLeader
    LeadTaken = dtLeadTaken
    ProjectID = iProjectID
    ProjectName = sProjectName
    WorkOrderStatus = sWorkOrderStatus
    WorkOrderSubStatus = sWorkOrderSubStatus
    WorkOrderType = sWorkOrderType
    WorkOrderSubType = sWorkOrderSubType
    WorkOrderPriority = sWorkOrderPriority
    RefNumber = sRefNumber
    Request = sRequest
End Sub

<DataMember()> _
Public Property Leader() As String
    Get
        Return _leader
    End Get
    Set(value As String)
        _leader = value
    End Set
End Property
Private _leader As String

<DataMember()> _
Public Property LeadTaken() As Date
    Get
        Return _leadTaken
    End Get
    Set(value As Date)
        _leadTaken = value
    End Set
End Property
Private _leadTaken As Date

<DataMember()> _
Public Property ProjectID() As Int32
    Get
        Return _projectID
    End Get
    Set(value As Int32)
        If (_projectID <> value) Then
            _projectID = value
        End If
    End Set
End Property
Private _projectID As Int32

<DataMember()> _
Public Property ProjectName() As String
    Get
        Return _projectName
    End Get
    Set(value As String)
        If (_projectName <> value) Then
            _projectName = value
        End If
    End Set
End Property
Private _projectName As String

<DataMember()> _
Public Property WorkOrderStatus() As String
    Get
        Return _workOrderStatus
    End Get
    Set(value As String)
        _workOrderStatus = value
    End Set
End Property
Private _workOrderStatus As String

<DataMember()> _
Public Property WorkOrderSubStatus() As String
    Get
        Return _workOrderSubStatus
    End Get
    Set(value As String)
        _workOrderSubStatus = value
    End Set
End Property
Private _workOrderSubStatus As String

<DataMember()> _
Public Property WorkOrderType() As String
    Get
        Return _workOrderType
    End Get
    Set(value As String)
        _workOrderType = value
    End Set
End Property
Private _workOrderType As String

<DataMember()> _
Public Property WorkOrderSubType() As String
    Get
        Return _workOrderSubType
    End Get
    Set(value As String)
        _workOrderSubType = value
    End Set
End Property
Private _workOrderSubType As String

<DataMember()> _
Public Property WorkOrderPriority() As String
    Get
        Return _workOrderPriority
    End Get
    Set(value As String)
        _workOrderPriority = value
    End Set
End Property
Private _workOrderPriority As String

<DataMember()> _
Public Property RefNumber() As String
    Get
        Return _refNumber
    End Get
    Set(value As String)
        _refNumber = value
    End Set
End Property
Private _refNumber As String

<DataMember()> _
Public Property Request() As String
    Get
        Return _request
    End Get
    Set(value As String)
        _request = value
    End Set
End Property
Private _request As String

End Class
#End Region

CompanyHeader:

Imports System.ComponentModel.DataAnnotations
Imports System.Collections.ObjectModel
Imports System.Runtime.Serialization
Imports System.Data.Services.Common


<DataServiceKey("ID")> _
<MetadataTypeAttribute(GetType(CompanyHeader.CompanyHeaderMetadata))> _
Partial Public Class CompanyHeader
Inherits DataTransferObjectHeaderBase

Friend NotInheritable Class CompanyHeaderMetadata

    'Metadata classes are not meant to be instantiated.
    Private Sub New()
        MyBase.New()
    End Sub

    <DataMember()> _
    Public Property Active As Boolean

    <DataMember()> _
    Public Property ID As Integer

    <DataMember()> _
    Public Property Created As DateTime

    <DataMember()> _
    Public Property Creator As String

    <DataMember()> _
    Public Property Modified As DateTime

    <DataMember()> _
    Public Property Modifier As String

    <DataMember()> _
    Public Property Name As String
End Class

Public Sub New()

End Sub
Public Sub New(iID As Integer, sName As String, bActive As Boolean, sCreator As String, dtCreated As DateTime, sModifier As String, dtModified As DateTime)
    ID = iID
    Name = sName
    Active = bActive
    Creator = sCreator
    Created = dtCreated
    Modifier = sModifier
    Modified = dtModified
End Sub
End Class

Unit Test Code:

<TestMethod()> _
Public Sub WorkOrderServiceTests_TestConnectivityThruService5()
    Dim woService As New DatabaseContext
    Dim woHeaders = New Repository(Of WorkOrderHeader)(woService)
    Dim woTests = New Repository(Of WorkOrderTest)(woService)
    Dim coHeaders = New Repository(Of CompanyHeader)(woService)
    Assert.IsTrue(woHeaders.Count <> 0)
End Sub

Things I have tried to resolve the issue:

1) Checked database - Both queries return data correctly. select * from vwWorkOrderHeader select * from vwCompanyHeader

2) Deleted WorkOrderHeader from the EDMX then recreated it from database.

3) MOQed out the DBContext to make sure that it isn't the service query doing something funny. This correctly returns the object, so it means that it is something at the context level or below.

4) Stepped through both tests to ensure that they use the same method of building the context - Thy do.

4) Stepped through both tests to ensure that they use the same method of building the repository - Thy do.

5) The only difference is during the following Function of DatabaseContext:

Public Overloads Function [Set](Of T As Class)() As System.Data.Entity.IDbSet(Of T) Implements Interfaces.IDatabaseContext.Set
    Return MyBase.Set(Of T)()
End Function

The WorkOrderHeader code has the following in the watch for MyBase.Set(Of T)()

{System.Data.Entity.DbSet(Of Insight.Model.WorkOrderHeader)} System.Data.Entity.DbSet(Of Insight.Model.WorkOrderHeader)

The CompanyHeader code has the following in the watch for MyBase.Set(Of T)()

{SELECT   [Extent1].[Name] AS [Name],   [Extent1].[Active] AS [Active],   [Extent1].[Creator] AS [Creator],   [Extent1].[Created] AS [Created],   [Extent1].[Modifier] AS [Modifier],   [Extent1].[Modified] AS [Modified],   [Extent1].[ID] AS [ID]  FROM (SELECT        [vwCompanyHeader].[ID] AS [ID],        [vwCompanyHeader].[Name] AS [Name],        [vwCompanyHeader].[Active] AS [Active],        [vwCompanyHeader].[Creator] AS [Creator],        [vwCompanyHeader].[Created] AS [Created],        [vwCompanyHeader].[Modifier] AS [Modifier],        [vwCompanyHeader].[Modified] AS [Modified]       FROM [dbo].[vwCompanyHeader] AS [vwCompanyHeader]) AS [Extent1]}   System.Data.Entity.DbSet(Of Insight.Model.CompanyHeader)

I am at a complete loss on this one and am entering my 3rd day of working on the same problem. I am hoping that some fresh eyes on the problem might see an error that I have made or point me in a direction of testing the problem that I have not thought of.

UPDATE:

I removed the service code to ensure it was something in the DBContext. I have isolated the service out of the equation so that only the repositories are being used and they are all using the same DatabaseContext, so it can't be anything related to the connection string. I verified that in the Model Browser under Insight_Model/EntityContainer:Insight_Entities/Entity Sets/WorkOrderHeaders exists and that under Insight_Model/Entity Types/WorkOrderHeader exists. It almost appears as though the DatabaseContext isn't even attempting to query the conceptual model for the entity set.

解决方案

After 3 (4) days (depending on how you view days, I separate days by when I sleep and not necessarily when the sun goes down/comes up), I found the answer. In the EDMX file above, I have a column named LeadTakenDate, in the WorkOrderHeader class, I used the field name LeadTaken. This was a stupid error on my part.

How can this benefit you possibly? Here is how I resolved the problem:

First I isolated the problem to exactly one area by MOQing out parts to see how far down the rabbit hole the problem was. Once I figured out the problem was in the DatabaseContext, I wrote a test case that created a working and a non working use case. This isolated the problem and allowed me to test theories to fix it quicker. I tried a thousand different things before trying to use the EF 5.x persistance ignorant poco generator. I commented out all of my code in the WorkOrderHeader class and copied the generated code in. Reran my tests and they worked, so I started uncommenting my properties and commenting out the generated code then rerunning my test until I hit the appropriate property.

The error message is cryptic enough that is can be very difficult to trouble shoot.

这篇关于实体类型&lt; class&gt;不是当前上下文模型的一部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆