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

时间:2015-09-08 14:55:15

标签: c# entity-framework configuration ef-code-first

我想先做一个"代码"基于现有数据库的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; }
}

......据我所知(根据我已经阅读的样本和文档),看起来是正确的。据我所知,唯一的#34;奇怪的是,Primary语言环境的列名在数据库中是不同的;我想让它在代码中比在表格中更具体。

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

我得到了一条相当长的错误信息,但它的核心就是这部分:

  

System.Data.Entity.Core.EntityCommandExecutionException:错误   执行命令定义时发生。看到内心   细节例外。 ---> System.Data.SqlClient.SqlException:无效   列名称' LocaleId'。

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

我是否误解了属性应该如何工作?我是否错误地配置了这个?或者我是否尝试做一些EF6不支持的事情?

1 个答案:

答案 0 :(得分:0)

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