前几天使用code first碰到错误:列名 'Discriminator' 无效。这是一个很少见的错误,搜索了很久才发现是code first的poco实体对象的继承问题。
比如,我定义了一个实体类,对应数据库的Project表:
1
2
3
4
5
6
|
[Table(
"T_Student"
)]
public
class
Student
{
public
int
Id {
get
;
set
; }
public
string
Name {
get
;
set
; }
}
|
后来又定义了一个子类ChildProject继承于它,但是子类不对应数据库任何表:
1
2
3
4
|
public
class
StudentResult : Student
{
public
string
ClassName {
get
;
set
; }
}
|
于是每次EF的Context访问到Project或者ChildProject的时候,都出现了错误:列名 'Discriminator' 无效。
解决办法:子类并不映射到任何数据库,加上一个不映射的属性[NotMapped]就可以了。
1
2
3
4
5
|
[NotMapped]
public
class
StudentResult : Student
{
public
string
ClassName {
get
;
set
; }
}
|