Ef code first EF6代码在不存在主键时首先引发NullReferenceException

Ef code first EF6代码在不存在主键时首先引发NullReferenceException,ef-code-first,entity-framework-6,Ef Code First,Entity Framework 6,这有点奇怪。我没有对数据库的管理访问权限,并且正在使用一个被适当约束但没有定义主键的表 模式如下: 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 Mod

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

模式如下:

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. 
[表(“Foo”)]
公共部分类模型
{
[Key]//也尝试在ModelBinder中设置此选项,但没有成功
公共字符串KeyColumn{get;set;}
公共布尔比特值{get;set;}
}
//在DbContext子类中:
公共数据库集{get;set;}
//在代码中时:
context.FooModel引发NullReferenceException。
我认为这是因为尽管模式相同,EF也无法映射到基础表
KeyColumn
是有效的键,但未明确定义为主键


有没有办法强制EF CodeFirst映射到此基础表?

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

var m = context.FooModel.SqlQuery(@"
    SELECT KeyColumn
    ,   BitValue 
        FROM Foo 
        WHERE KeyColumn = @KeyColumn
    ", new SqlParameter("@KeyColumn", keyColumnValue)).FirstOrDefault();
其他操作,如添加和保存模型,似乎在此之后也能正常工作