EF6 Code First 在不存在 PRIMARY KEY 时抛出 NullReferenceException

EF6 Code First throwing NullReferenceException when no PRIMARY KEY exists

这有点奇怪。我没有对数据库的管理访问权限,并且正在使用受到适当约束但未定义主键的 table。

架构如下:

CREATE TABLE Foo
(
    KeyColumn VARCHAR(100) NOT NULL UNIQUE,
    BitValue BIT NOT NULL
)

在 EF 中,有一个模型:

[Table("Foo")]
public partial class FooModel
{
    [Key] //Also tried by setting this in the ModelBinder as well with no luck
    public string KeyColumn {get;set;}
    public bool BitValue {get;set;}
}

//Within DbContext subclass:
public DbSet<FooModel> {get;set;}

//When in code:
context.FooModel throws NullReferenceException. 

我认为这是因为 EF 无法映射到底层 table,尽管架构相同。 KeyColumn 是一个有效的键,但没有像 PRIMARY KEY 那样明确定义。

有没有办法强制 EF CodeFirst 映射到这个底层 table?

我能够通过使用 EF6 提供的泄漏抽象来解决这个问题。

var m = context.FooModel.SqlQuery(@"
    SELECT KeyColumn
    ,   BitValue 
        FROM Foo 
        WHERE KeyColumn = @KeyColumn
    ", new SqlParameter("@KeyColumn", keyColumnValue)).FirstOrDefault();

添加和保存模型等其他操作在此之后似乎可以正常工作。