我想弄清楚如何使这项工作在EF中。我有两个实体Employee
和User
。我需要这样做,因此User
可以映射到Employee
。如果有映射,那么它将是1:1。实体框架代码的第一个关系
基本上这个系统可以被雇员和外部供应商访问,但我想要一个表来管理登录:Users
。
如何在流体配置的EF中定义这种实用性?
我想弄清楚如何使这项工作在EF中。我有两个实体Employee
和User
。我需要这样做,因此User
可以映射到Employee
。如果有映射,那么它将是1:1。实体框架代码的第一个关系
基本上这个系统可以被雇员和外部供应商访问,但我想要一个表来管理登录:Users
。
如何在流体配置的EF中定义这种实用性?
你只需要设置简单流畅的配置:
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; }
}
public class User
{
...
public virtual Employee Employee { get; set; }
}
This tutorial可能会有所帮助。
因此,所有你需要做的就是定义一个可空类型?定义一对多关系时,您是否必须定义导航属性和Fk? – Sam 2012-08-12 07:16:00
这甚至不会编译,因为只有值类型可以为空。引用类型总是可以为空,'Employee'是引用类型。 – 2012-08-12 08:14:30
@LadislavMrnka你是对的,谢谢 – 2012-08-12 22:58:54
那么流畅的配置与注释相同吗?另外,在配置一对多关系时,我必须有一个外键字段和一个导航属性吗?所以在员工 - 用户的情况下,我必须(在员工上)具有用户标识和导航属性用户吗? – Sam 2012-08-13 03:33:43
是的流利配置与带注释的配置相同。在配置一对多关系时,数据库中始终有FK,但类中FK属性的存在因[两种可能的关联类型]而异(http://stackoverflow.com/questions/5281974/code-first-independent-关联-vs-foreign-key-associations/5282275#5282275)在EF中使用。 – 2012-08-13 08:14:11