【发布时间】:2017-02-23 06:08:45
【问题描述】:
考虑一个简单的微博平台,其数据模型定义如下:
[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) 时,我将引用 users.id 的 messages.author 作为外键包含在内。我喜欢这样:整洁和解释性。
然而,当我尝试使用代码优先方式时,我发现它将外键列命名为 messages.User_Id 而不是 messages.author,尽管我已经明确指定了 [Column("author")] 属性。
如何才能纠正这种行为?
我同意将其简单命名为 .user(而不是我原来的 .author 想法),以便在必要时使参考更加明显,但肯定不是 .User_Id - 当这种明显、多余和丑陋的时候,我完全不喜欢它_Id 被附加到键列。
我使用带有 SQLiteCodeFirst 库的 SQLite 数据库,但不确定这是正常的实体框架行为还是只是这个特定库中的错误。
【问题讨论】:
标签: .net sqlite ef-code-first entity-framework-6 ef-code-first-mapping