C# EF6抱怨未使用的模型没有密钥
我只是花了一些时间解决了这个最奇怪的错误,但我不知道为什么会发生。也许有人可以跟上来解释一下为什么 tl;dr:轻量级MembershipContext由于某些完全不相关的对象没有和ID字段而失败,但只有在MVC下运行时才会这样做:所有确保这些内容正常工作的集成测试。。。它们工作正常 我所拥有的: 我有很多项目的解决方案。有关的建议包括:C# EF6抱怨未使用的模型没有密钥,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我只是花了一些时间解决了这个最奇怪的错误,但我不知道为什么会发生。也许有人可以跟上来解释一下为什么 tl;dr:轻量级MembershipContext由于某些完全不相关的对象没有和ID字段而失败,但只有在MVC下运行时才会这样做:所有确保这些内容正常工作的集成测试。。。它们工作正常 我所拥有的: 我有很多项目的解决方案。有关的建议包括: 域(包含用于业务对象/行为的POCO) Data(包含带有FluentAPI配置的EF6内容,并引用LPA.Domain) Web(包含一个MVC项目、re
- 域(包含用于业务对象/行为的POCO)
- Data(包含带有FluentAPI配置的EF6内容,并引用LPA.Domain)
- Web(包含一个MVC项目、refs数据和域)
MembershipContext
仅在登录期间使用,并绕过基于用户的审核系统来验证用户。MembershipContext
只有三个实体:User、UserMembershipDetail和UserRole
第二个,CoreContext
具有所有正常内容(包括出于审计目的跟踪当前登录的用户ID)。这有许多实体
我所做的:
现在让我们假设我花了几天时间做一些领域级的开发。我添加了一些类,设置了它们的db对应项,构建了模型(在CoreContext
中,MembershipContext
不会改变),为模型编写了集成测试,并为域工作编写了单元测试。一切都很好。我根本没碰过MembershipContext
我所做的部分工作是向LPA.Domain
添加一个新类来处理一个名为Matter(legal Matter)的对象。这是为了模拟我在其他地方需要的一个方法,但还没有在db中设置。我在适当的实体上添加了一个Ignore()
,稍后将充实它。没什么大不了的,对吧?所有这些仍然发生在CoreContext
发生了什么:
我完成了几天的域级开发,然后启动LPA.Web项目,在尝试登录时遇到了一个奇怪的错误。一些四处挖掘的人基本上告诉我:
当试图从MembershipContext
中的Users
获取时,它会抛出一个异常,指出LPA.Data.Matter
EntityType没有键
关于这一点,有几点令人困惑:
LPA.Data.Matter
不是一个对象。Matter
对象位于LPA.Domain.Legal
命名空间中。这大概是EF6内部的事情,因为它创建了自己的对象来处理事情。好吧,我可以买MembershipContext
根本不使用物质
。它使用的三个对象对对象没有下游引用(浅或深)
成员身份上下文。用户
工作正常(用户是异常中的违规实体)我认为这一定表明LPA.Web
项目加载LPA.Data.MembershipContext
的方式与测试项目的方式不同,但这对我来说没有多大意义Matter
对象用于域项目的测试,而LPA.Data.CoreContext
测试没有问题,为什么它在成员资格上失败,并且仅在通过MVC项目使用它时失败Matter
类作为域的快速助手,但尚未充实存储内容。因此,我在对象上没有ID字段。解决方法非常简单,只需添加一个ID字段
这解决了问题,但无论如何也不能帮助我理解出了什么问题
值得一提的是,在MVC项目中,我们使用了基于ExtendedMembershipProvider
的自定义用户和角色提供程序,该提供程序使用自定义存储库(该存储库反过来使用MembershipContext
)。在测试和MVC项目之间,MembershipContext
的实例化是相同的。我无法想象他们为什么会采取不同的行动
这就好像MVC项目中有什么东西迫使EF6读取/验证域类中的每个对象,以确保它们对不存在的数据模型的有效性
有人知道为什么会这样吗?我自己也很困惑