我有一个使用实体框架数据注释映射到POCO的大型MySQL数据库。
除了一个表中的一列(或者至少我还没有注意到任何其他类似的问题),大多数事情都很有效。
mysql > describe _passwords;
+----------------+------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------+------+-----+---------------------+----------------+
| id | bigint(20) | NO | PRI | NULL | auto_increment |
| creation_date | timestamp | NO | | CURRENT_TIMESTAMP | |
| user_id | bigint(20) | NO | MUL | NULL | |
| password_hash | char(64) | NO | | NULL | |
| valid_end_date | timestamp | NO | | 0000-00-00 00:00:00 | |
+----------------+------------+------+-----+---------------------+----------------+
password_hash列的映射方式如下:
[Required]
[Index(IsUnique=true)]
[Column("password_hash")]
public String PasswordHash
{
get;
set;
}
然而,当EF运行此查询时,它将其称为PasswordHash,自然会失败。
当我使用Fluent API尝试相同时,它可以工作:
modelBuilder.Entity<Password>().Property(password => password.PasswordHash).HasColumnName("password_hash");
然而,其他一切都使用数据注释进行映射,坦率地说,我喜欢这种方式。因此,在将此/所有映射移动到Fluent API
时,请更好地理解此问题的根源