gpt4 book ai didi

c# - 为什么 Entity Framework 会尝试选择所有列,即使我只指定了两个列?

转载 作者:可可西里 更新时间:2023-11-01 08:29:03 25 4
gpt4 key购买 nike

我继承了一个 ASP MVC 项目,该项目使用 Entity Framework 6.1.3 与 Dynamics CRM 2011 SQL 数据库进行交互。

我正在使用此查询来尝试获取所有具有帐号的事件帐户,并且我只选择两列为匿名类型:

var results = context.Accounts
.Where(a => (a.AccountNumber != null)
&& (a.StateCode == (int)AccountState.Active))
.Select(a => new
{
a.AccountId,
a.AccountNumber
});

( contextDbContextAccountsDbSet<Account>Account 定义了所有字段,包括自项目创建以来删除的字段。这些由 EF 生成。)

执行查询时出现以下异常:

Invalid column name "Opportunity_1", "Opportunity_2", ... , "Opportunity_7"

所有提及的列都是自此项目创建以来已从数据库中删除的列。

发生错误是因为 EF 运行的 SQL 查询实际上如下所示:

SELECT     
[Extent1].[StateCode] AS [StateCode],
[Extent1].[AccountId] AS [AccountId],
[Extent1].[AccountNumber] AS [AccountNumber]

FROM (SELECT
[Account].[AccountId] AS [AccountId],
[Account].[AccountNumber] AS [AccountNumber],
...
!! EVERY SINGLE COLUMN !!
...
[Account].[Opportunity_1] AS [Opportunity_1], // These have been deleted
[Account].[Opportunity_2] AS [Opportunity_2] // from the database

FROM [dbo].[Account] AS [Account]) AS [Extent1]

WHERE ([Extent1].[AccountNumber] IS NOT NULL) AND (0 = [Extent1].[StateCode])

我没想到它会尝试选择每一列,显然是因为字段已从数据库中删除而不是模型中,所以我得到了错误。

我读过几篇文章,表明我的查询看起来是正确的,它应该只选择 3 个必需的列并忽略其余列: one/two/three

我想避免必须从数据库中重新生成整个模式/模型/任何内容,否则我会发现每次对数据库进行更改时我都会这样做。

是否可以只从数据库中选择这两列而忽略所有其他列,或者这就是 EF 的工作方式,我每次都会更新模型并重新部署项目?


这是整个 DbContext型号:

namespace AccountMarker.Models
{
using System.Data.Entity;
using System.Data.Entity.Infrastructure;

public partial class CRMEntities : DbContext
{
public CRMEntities()
: base("name=CRMEntities")
{
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}

public virtual DbSet<Account> Accounts { get; set; }
}
}

最佳答案

当您创建实体并删除之前映射的特定列时,EF 将采用相同的引用,并尝试根据实体而不是您所做的查询来查找列。

快速解决方案,删除表构建项目的实体并将其重新添加到 emdx 模型中并重新构建。

或者从已删除的 dbcontext 中删除所有列。

关于c# - 为什么 Entity Framework 会尝试选择所有列,即使我只指定了两个列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42670128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com