考虑一个简单的微博平台,其数据模型定义如下:
[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库一起使用,但不确定这是正常的实体框架行为还是只是这个特定库中的错误。