[英]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.