【问题标题】:Code First entity framework and foreign keysCode First 实体框架和外键
【发布时间】:2013-11-15 13:16:17
【问题描述】:

假设我有一个由代码首先创建的数据库,看起来像这样。

Movie (table)
ID int PK
MoveiName nvarchar(100)

Actor (table)
ID int PK
ActorName nvarchar(100)
Movie_ID int FK

这些是我会使用的模型,显然不完全是这样,但你会明白我的意思。

class Movie
{  
    int ID{get;set;}
    string MovieName {get;set;}
    List<Actor> Actors {get;set}
}

class Actor
{
    int ID{get;set}
    string Actorname{get;set}
    Movie Movie{get;set;}
    int Move_ID{get;set;}
}

数据库首先让我能够从演员那里查询电影,但也让我可以设置演员的伪造键属性来更新数据库。我不能首先在代码中执行此操作,因为模型中的外键仅是对象。我不想获取 Movie 对象并设置属性,如果我知道我的电影的 id,我宁愿只设置外键而不调用获取电影。

有意义吗?哈哈

我想使用 codefirst 和实体迁移,但我希望具有与数据库相同的能力,首先在对象上设置外键。

为帮助干杯:-D

【问题讨论】:

  • “我不能先在代码中这样做,因为模型中没有外键”。首先是代码 - 将其添加到您的模型中!有些开发者不喜欢外键,有些则喜欢msdn.microsoft.com/en-us/magazine/hh708747.aspx
  • 我知道你可以将它添加到你的模型中,但是迁移会创建重复的键

标签: c# database entity-framework


【解决方案1】:

先把你的代码改成这个

public class Movie
{  
   int ID{ get; set; }
   string MovieName {get; set; }
   List<Actor> Actors {get; set; }
}

 public class Actor
 {
    int ID{get;set}
    string ActorName{ get; set }
    Movie Movie{ get; set; }
    int MovieID{ get; set; }
 }

通过convention EF 会知道MovieIDMovie 的外键

然后将Actor代码改成这样:

public class Actor
{
    int ID{get;set}
    string ActorName{ get; set; }
    Movie Movies{ get; set; }
}

演员出现在许多电影中。电影有很多演员.... :-)

但回到你的一对多,演员只出现在一部电影中 - 如果你真的希望外键是Move_ID,那么添加一个data annotation

[ForeignKey("Move_ID")]
Movie Movie{ get; set; }

或者使用FluentAPI进行配置

   modelBuilder.Entity<Actor>()
               .HasRequired(c => c.Movie)
               .WithMany(d => d.Actors)
               .HasForeignKey(c => c.Move_ID);

【讨论】:

  • 我应该提到这不是一个真正的场景,如果我想要一个电影数据库,你是对的。演员可以在我喜欢的许多电影中额外考虑。那么唯一的区别是_?我最近开始使用果园,我认为那里很流行。
  • 不,您还必须将“i”放回“移动”部分才能将其转换为“MovieID”。或者,您可以在任何地方使用“ID”。这一切都在我链接到的入门页面中。请去阅读msdn.microsoft.com/en-us/data/ee712907
  • 作为一个敏感的灵魂,我可能会在您的回复中读到一些烦恼,这些烦恼可能存在也可能不存在。但是,您的答案是正确的。我在没有 _ 的模型上添加了外键,效果很好。好人。
猜你喜欢
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多