当没有PRIMARY KEY存在时,EF6代码首先抛出NullReferenceException

时间:2015-03-10 01:22:30

标签: 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 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无法映射到基础表。 KeyColumn是有效密钥,但未明确定义为PRIMARY KEY。

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

1 个答案:

答案 0 :(得分:0)

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

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

其他操作,例如添加和保存模型似乎在此之后工作。