2012-08-12 58 views
1

我想弄清楚如何使这项工作在EF中。我有两个实体EmployeeUser。我需要这样做,因此User可以映射到Employee。如果有映射,那么它将是1:1。实体框架代码的第一个关系

基本上这个系统可以被雇员和外部供应商访问,但我想要一个表来管理登录:Users

如何在流体配置的EF中定义这种实用性?

回答

3

你只需要设置简单流畅的配置:

modelBuilder.Entity<User>() 
      .HasOptional(u => u.Employee) 
      .WithRequired(e => e.User); 

或以相反的顺序:

modelBuilder.Entity<Employee>() 
      .HasRequired(e => e.User) 
      .WithOptional(u => u.Employee); 

EF将使用Employess的PK的FK到用户 - 这是EF正确强制性要求使用一对一的关系。在数据注解的情况下,足以与ForeignKey属性与User导航属性配对,以纪念员工PK:

public class Employee { 
    [Key, ForeignKey("User")] 
    public int Id { get; set; } 

    public virtual User User { get; set; } 
} 
+0

那么流畅的配置与注释相同吗?另外,在配置一对多关系时,我必须有一个外键字段和一个导航属性吗?所以在员工 - 用户的情况下,我必须(在员工上)具有用户标识和导航属性用户吗? – Sam 2012-08-13 03:33:43

+0

是的流利配置与带注释的配置相同。在配置一对多关系时,数据库中始终有FK,但类中FK属性的存在因[两种可能的关联类型]而异(http://stackoverflow.com/questions/5281974/code-first-independent-关联-vs-foreign-key-associations/5282275#5282275)在EF中使用。 – 2012-08-13 08:14:11

1
public class User 
{ 
    ... 
    public virtual Employee Employee { get; set; } 
} 

This tutorial可能会有所帮助。

+0

因此,所有你需要做的就是定义一个可空类型?定义一对多关系时,您是否必须定义导航属性和Fk? – Sam 2012-08-12 07:16:00

+0

这甚至不会编译,因为只有值类型可以为空。引用类型总是可以为空,'Employee'是引用类型。 – 2012-08-12 08:14:30

+0

@LadislavMrnka你是对的,谢谢 – 2012-08-12 22:58:54

相关问题