C# 实体框架未正确加载子实体
我有这样一个数据模型: 文章C# 实体框架未正确加载子实体,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我有这样一个数据模型: 文章 *Id | int ... | 活动 *ArticleId | int *ActivityType | nvarchar(50) *AccountId | nvarchar(50) ... | 在上面,星号(*)列是主键,ArticleId是ArticleId的外键 我首先使用实体框架6数据库。当我运行下面的代码时,大多数时候结果都不相等!结果是可重复的
*Id | int
... |
活动
*ArticleId | int
*ActivityType | nvarchar(50)
*AccountId | nvarchar(50)
... |
在上面,星号(*
)列是主键,ArticleId
是ArticleId的外键
我首先使用实体框架6数据库。当我运行下面的代码时,大多数时候结果都不相等!结果是可重复的
查询A:
var aCount1 = db.Article.Include("Activity")
.First(x => x.Id == 1).Activity.Count;
SELECT
[Extent1].[ActivityType] AS [ActivityType],
[Extent1].[AccountId] AS [AccountId],
[Extent1].[ArticleId] AS [ArticleId]
FROM
[dbo].[Activity] AS [Extent1]
WHERE
[Extent1].[ArticleId] = @EntityKeyValue1
问题B:
var aCount2 = db.Activity.First(x => x.ArticleId == 1).Count();
SELECT
[GroupBy1].[A1] AS [C1]
FROM
(SELECT
COUNT(1) AS [A1]
FROM
[dbo].[Activity] AS [Extent1]
WHERE
([Extent1].[ArticleId] = @p__linq__0)) AS [GroupBy1]
我使用了惰性加载和渴望加载,没有任何改变
实体框架查询:
查询A:
var aCount1 = db.Article.Include("Activity")
.First(x => x.Id == 1).Activity.Count;
SELECT
[Extent1].[ActivityType] AS [ActivityType],
[Extent1].[AccountId] AS [AccountId],
[Extent1].[ArticleId] AS [ArticleId]
FROM
[dbo].[Activity] AS [Extent1]
WHERE
[Extent1].[ArticleId] = @EntityKeyValue1
问题B:
var aCount2 = db.Activity.First(x => x.ArticleId == 1).Count();
SELECT
[GroupBy1].[A1] AS [C1]
FROM
(SELECT
COUNT(1) AS [A1]
FROM
[dbo].[Activity] AS [Extent1]
WHERE
([Extent1].[ArticleId] = @p__linq__0)) AS [GroupBy1]
当我从SSMS执行上述查询时,结果是相同的,但EF上获取的对象不是真的。查询B必须更改为
Query B) var aCount2 = db.Activity.Where(x=>x.ArticleId == 1).Count();
使用“open with”=>“automatic editor selector”检查.edmx文件,以确保所有键列(在您的示例中:ArticleId、ActivityType、AccountId)都存在于相关实体的键部分中。这样,您就可以确定您的模型没有问题,然后我们就可以深入了解您的问题。是的,由于技术限制,我有两个数据库。在本地数据库上,ArticleId不是主键的一部分,但在主数据库上可以。我认为EF在一级缓存中使用了主键,所以当我在当前会话中使用不同的ArticleId重复查询时,它可能会返回错误的结果。创建一个简短、完整的问题副本。你可能会发现这个问题。我不清楚你正在经历什么样的行为,你在期待什么,它们之间有什么区别。