EF6 代码优先映射,其中数据库中的键名不同

EF6 Code First Mapping where key name is different in DB

我正在尝试基于现有数据库创建一个 "code first" EF 模型(我立即意识到这与 EF 代码优先方法的概念背道而驰),但我保留 运行进入一个问题,错误消息对我来说没有意义,所以我希望得到一些见解。

我的table是这样定义的:

CREATE TABLE [dbo].[BackupLocales]
(
    [Id] UNIQUEIDENTIFIER NOT NULL PRIMARY KEY, 
    [LocaleId] INT NOT NULL constraint fkBackupLocales_Locale references dbo.Locales(Id), 
    [BackupLocaleId] INT NOT NULL constraint fxBackupLocales_BackupLocale references dbo.Locales(Id), 
    [Weight] INT NOT NULL DEFAULT 1
)
go
create unique nonclustered index uxBackupLocales_Locale_Weight on dbo.BackupLocales(LocaleId, [Weight]);

在代码中,我写了下面的实体class:

public class BackupLocale
{
    [Key]
    [Column("Id")]
    public Guid Id { get; set; }

    public int Weight { get; set; }

    [Column("LocaleId")]
    public int PrimaryId { get; set; }

    [ForeignKey("PrimaryId")]
    public virtual Locale Primary { get; set; }

    [Column("BackupLocaleId")]
    public int BackupId { get; set; }

    [ForeignKey("BackupId")]
    public virtual Locale Backup { get; set; }
}

... 据我所知(根据我阅读的示例和文档),它看起来是正确的。据我所知,唯一的 "weirdness" 是 Primary 语言环境的列名称在数据库中不同;我想让它在代码中比在 table.

中更具体

当然,这在尝试加载实体模型时不起作用(否则我为什么要问这个问题?:))

我收到一条相当长的错误消息,但它的核心是这部分:

System.Data.Entity.Core.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Invalid column name 'LocaleId'.

这里的问题是,如果我不使用 EF,带有消息 "Invalid column name 'LocaleId'" 的 SqlClient.SqlException 将意味着 SQL 服务器中确实不存在该列。 . 但这里绝对不是这种情况。它确实存在......所以我不确定这里发生了什么。我唯一能想到的是,我正在更改 属性 的名称这一事实以某种方式搞砸了映射,但当然也可能是我只是在做一些愚蠢的事情。

我是不是误解了属性的工作原理?我是否配置不正确?还是我正在尝试执行 EF6 不支持的操作?

看起来这是一个 Visual Studio 问题。我关闭解决方案,退出 VS,重新启动 VS,并加载项目,它开始工作了。 :(