2013-01-12 53 views
10

我似乎无法在流利的API中找到一对多的关系语法。流利的API - 一对多

作为一个例子我有两个表如下

用户

Id 
Name 

UserHistory

Id 
UserId 
Date 

在类我有以下

public class User 
{ 
    public int Id { get; set; } 
    public virtual ICollection<UserHistory> Histories { get; set; } 
} 

public class UserHistory 
{ 
    public int Id { get; set; } 
    public int UserId { get; set; } 
    public DateTime Date { get; set; } 
} 

我试过以下,但我不确定它是否真的正确。

modelBuilder.Entity<User>() 
     .HasRequired(w => w.Histories) 
     .WithMany(); 

modelBuilder.Entity<User>() 
     .HasMany(f => f.Histories) 
     .WithOptional() 
     .HasForeignKey(f => f.UserId); 

什么是一对多关系的正确语法?

从技术上讲,我可以通过添加一个新表将其分解为多对多,但我不想引入另一个表。

回答

24

在模型中User实体有许多Histories每个历史有需要User和关系具有一个外键称为UserId

modelBuilder.Entity<User>() 
    .HasMany(u => u.Histories) 
    .WithRequired() 
    .HasForeignKey(h => h.UserId); 

(的关系必须是必需的(不是可选的),因为外键属性UserId不是nullab )

+1

如果UserHistory UserId为空,那么它会是WithOptional()? – fes

+1

@fes:是的,没错。 – Slauma