簡體   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