Entity framework 使用EF 4.1 code first fluent api为复杂类型创建外键

Entity framework 使用EF 4.1 code first fluent api为复杂类型创建外键,entity-framework,ef-code-first,Entity Framework,Ef Code First,下面是我的域实体 public class User { public int Id { get; set; } public string Firstname { get; set; } public string Lastname { get; set; } public DateTime? DateOfBirth { get; set; } public string Username { get; set; } public string

下面是我的域实体

public class User
{
    public int Id { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string EmailAddress { get; set; }

    public RoleType RoleType { get; set; }
}

public class Role
{
    public int Id { get; set; }
    public string Name { get; set; }
}
我已将角色类型作为复杂类型(实现枚举映射)。所以我可以使用类似于
context.Users.FirstOrDefault(u=>u.RoleType.Value==(long)RoleType.Admin)的东西
RoleTypes.Admin
是到角色实体的枚举映射

public class RoleType
{
    public int Value { get; set; }

    // And all the implicit operators to map with enum
}
然后我用fluentapi创建了一个映射

public class RoleTypeMapping : ComplexTypeConfiguration<RoleType>
{
    public RoleTypeMapping()
    {
        Property(r => r.Value)
            .HasColumnName("RoleId"); // To make sure that in RoleType property of User EF entity maps to an int column [RoleId] in database (table [Users])
    }
}
public类RoleTypeMapping:ComplexTypeConfiguration
{
公共角色映射()
{
属性(r=>r.Value)
.HasColumnName(“RoleId”);//确保用户EF实体的in-RoleType属性映射到数据库(表[Users])中的int列[RoleId])
}
}
我想使用fluent api在[Users]表中为[Users].[RoleId]引用[Role].[Id]创建外键关联。请任何人为我提供指导以实现此目标


我尝试添加Role类型的属性并通过fluentapi创建映射,但是EF创建了另一个列Role_Id并将其作为外键。我希望现有的[RoleId]列(复杂类型)是外键,这是不可能的。若要与角色表关联,必须放弃类似枚举的方法,并定义用户实体,如:

public class User
{
    public int Id { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public DateTime? DateOfBirth { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string EmailAddress { get; set; }

    public Role Role { get; set; }
}
首先,关系不是枚举,复杂类型不能包含导航属性(以及外键)