EF6 CodeFirst双向一对一非主键关联如何指定

EF6 CodeFirst双向一对一非主键关联怎么指定
一个系统的用户User,不一定需要指定一个员工emp,例如admin用户

    public class t_OS_User
    {
        public int ID { get; set; }
        public String Name { get; set; }
        public int? EmpID { get; set; }
        [ForeignKey("EmpID")]
        public virtual t_OS_Emp t_OS_Emp { get; set; }
    }

一个员工emp,不一定需要一个登陆的角色User,例如公司的保安

    public class t_OS_Emp
    {
        public int ID { get; set; }
        public String Name { get; set; }
        public virtual t_OS_User t_OS_User { get; set; }
    }

如果t_OS_User是主表,t_OS_Emp是依赖表,那么API应该怎么指定?
这个是我写的,报错
modelBuilder.Entity<t_OS_User>()
.HasOptional(q => q.t_OS_Emp)
.WithOptionalDependent(q => q.t_OS_User)
.WillCascadeOnDelete(false);


One or more validation errors were detected during model generation:

t_OS_User_t_OS_Emp_Source: : Multiplicity is not valid in Role 't_OS_User_t_OS_Emp_Source' in relationship 't_OS_User_t_OS_Emp'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.
------解决方案--------------------
Staff应该是独立的。

然后User是Staff的子类,而且扩展了有关于登录的信息。


如果你所谓的EF(我基本上不用EF)不支持继承,你首先要知道这个EF的缺点(在以后设计时要每一次都注意到),那么你可以采取变通的做法。

例如,你可以把登录信息从Staff中分离出来,定义为
public class LoginInfo
{
    public string UserId;
    public string .......
}


也就是说,如果不支持继承,那么你就需要为“子类对父类的扩展”单独建立表。

例如如果还有“小时工”类,也是从Staff继承的,并且扩展了针对小时工的工作时间和费用的资源优化信息,那么现在你就可以与“可登录用户”一样对待。