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();
添加和保存模型等其他操作在此之后似乎可以正常工作。
这有点奇怪。我没有对数据库的管理访问权限,并且正在使用受到适当约束但未定义主键的 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();
添加和保存模型等其他操作在此之后似乎可以正常工作。