这有点奇怪。我没有对数据库的管理访问权限,并且正在使用受到适当约束的表,但没有定义主键。
架构如下:
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映射到这个基础表?
答案 0 :(得分:0)
我能够通过使用EF6提供的漏洞抽象来解决这个问题。
var m = context.FooModel.SqlQuery(@"
SELECT KeyColumn
, BitValue
FROM Foo
WHERE KeyColumn = @KeyColumn
", new SqlParameter("@KeyColumn", keyColumnValue)).FirstOrDefault();
其他操作,例如添加和保存模型似乎在此之后工作。