【发布时间】:2018-04-04 14:59:26
【问题描述】:
我正在开发一个项目,我正在使用实体框架和代码优先方法。我的第一个模型 Player 有两个字符串作为它的 ids(我没有选择那个,我知道这是一个不好的方法):
public class Player()
{
[Key, Column(Order=0)]
public string Name { get; set;}
[Key, Column(Order=1)]
public string TeamId { get; set;}
public Stat PlayerStat { get; set;}
}
类统计:
public class Stat()
{
[Key]
public int Id { get; set;}
// This property should set the name id of the player
public string Name { get; set;}
// This property should set the teamId of the player
public string TeamId{ get; set;}
[Required]
public Player Player { get; set;}
}
玩家类与stat类是一对一的关系,其中Stat类对于玩家类是可选的,而玩家类对于stat类是必需的。
我的问题是,当我使用 Entity Framework 创建新迁移并更新数据库时,它会为 Stat 表创建 5 列。
- 身份证
- 姓名
- 团队 ID
- 玩家姓名
- Player_TeamId
类 stat 中的属性 Name 和 TeamId 应该只用于设置外键的值,而不应该在表中创建列。有没有办法将属性名称映射到生成的列 "Player_Name" 和 TeamId 到 "Player_TeamId" ?
【问题讨论】:
-
您需要手动为每个表创建外键。除非您有一个 ID 列来保存该引用,否则这些对象引用将无法工作。 EF 正在尝试为您创建它,因为您没有指定一个。你有一个 team_id 但你没有告诉 EF 它是你的外键。如果您使用带有快速拖放功能的 EF 设计器,您可以非常轻松地做到这一点。您的统计表中没有指向父玩家的 player_id
-
玩家名字作为主键的一部分 - 这很“残忍”:)
-
确实是哈哈
标签: c# entity-framework foreign-keys composite-primary-key