我想先做一个"代码"基于现有数据库的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不支持的事情?
答案 0 :(得分:0)
看起来这是一个Visual Studio问题。我关闭了解决方案,退出VS,重新启动VS,并加载项目,它开始工作。 :(