Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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
C# 实体框架未正确加载子实体_C#_Sql Server_Entity Framework - Fatal编程技术网

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重复查询时,它可能会返回错误的结果。

创建一个简短、完整的问题副本。你可能会发现这个问题。我不清楚你正在经历什么样的行为,你在期待什么,它们之间有什么区别。