繁体   English   中英

EF6代码优先映射,其中密钥名称在数据库中不同

[英]EF6 Code First Mapping where key name is different in DB

我正在尝试基于现有数据库创建“代码优先” EF模型(我立即意识到这与EF代码优先方法的概念背道而驰),但我一直遇到问题,并且错误消息没有对我来说很有意义,所以我希望能提供一些见识。

我的表是这样定义的:

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]);

在代码中,我编写了以下实体类:

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; }
}

...据我所知(根据我已阅读的示例和文档),看起来是正确的。 据我所知,唯一的“怪异”是数据库中Primary语言环境的列名不同; 我想使其在代码中比在表中更具体。

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

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

System.Data.Entity.Core.EntityCommandExecutionException:执行命令定义时发生错误。 有关详细信息,请参见内部异常。 ---> System.Data.SqlClient.SqlException:无效的列名称“ LocaleId”。

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

我是否误解了属性应该如何工作? 我配置不正确吗? 还是我正在尝试做EF6不支持的事情?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM