考虑一个简单的微博平台被定义为数据模型如下:如何在EF6代码优先中设置自定义引用列名称?
[Table("users")]
public class User
{
[Column("id"), Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
[Column("name"), MaxLength(45), Index(IsUnique = true)]
public string Name { get; set; }
[Column("password"), MaxLength(45)]
public string Password { get; set; }
public virtual ICollection<Message> Messages { get; set; }
}
[Table("messages")]
public class Message
{
[Column("id"), Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
[Column("text"), MaxLength(512)]
public string Text { get; set; }
[Column("author")]
public virtual User Author { get; set; }
}
当我在设计它的数据库(SQL DDL)第一种方式,我已经包括了messages.author
引用users.id
作为外键。我喜欢这样:整洁和解释性。
但是,当我尝试使用代码优先的方式时,我发现它命名外键列messages.User_Id
而不是messages.author
,尽管我明确指定了[Column("author")]
属性。
这种行为如何得到纠正?
我会同意它命名只是.user
(而不是我原来的.author
想法),使基准必要时更为明显,但肯定不是.User_Id
- 我完全不喜欢它,当这种明显的,多余的,丑陋的_Id
被追加到关键列。
我使用SQLite数据库与SQLiteCodeFirst库,我不确定这是否是正常的实体框架行为或只是在这个特定的库中的错误。