想象一下,我有一个首先由代码创建的数据库,看起来像这样。
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;}
}
数据库首先使我能够从一个actor查询电影,但也允许我设置actor的forgien键属性来更新数据库。我不能在代码中首先执行此操作,因为外键在模型中不仅仅是对象。我不想获取Movie对象并设置属性,如果我知道我的电影的ID,我宁愿只设置外键而没有调用来获取电影。
有意义吗?洛尔
我想使用codefirst和实体迁移,但我希望与数据库具有相同的能力,以便在对象上设置外键。
欢呼帮助:-D
答案 0 :(得分:7)
首先将您的代码更改为此
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会知道MovieID
是Movie
的外键
然后将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);