如何首先在EF 4.1代码中映射父列

lea*_*ner 4 entity-framework poco mapping-model

在我的项目中,我有以下DomainModel.

public class Login
{
    public Guid Id { get; set; }
    public Login CreatedBy {get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我使用流畅的配置如下:

modelBuilder.Entity<Login>()
            .HasKey(x => x.Id)
            .ToTable("Login");

modelBuilder.Entity<Login>()
            .HasOptional(x => x.CreatedBy)
            .WithMany()
            .HasForeignKey(x => x.CreatedBy);
Run Code Online (Sandbox Code Playgroud)

我在存储库中获取所有Logins数据的代码如下:

return from d in Db.Logins.Include("CreatedBy") 
       select d;
Run Code Online (Sandbox Code Playgroud)

当我执行代码时,我收到以下错误:

外键组件"CreatedBy"不是"Login"类型的声明属性.验证它是否未从模型中明确排除,并且它是有效的原始属性.

任何人都可以在这里暗示我做错了吗?

提前致谢

Era*_*nga 5

..尚未明确地从模型中排除,并且它是一个有效的原始属性

您的外键映射.HasForeignKey(x => x.CreatedBy)不使用原始属性.

public class Login
{
    public Guid Id { get; set; }
    public virtual Login CreatedBy {get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后将其映射为

modelBuilder.Entity<Login>()
            .HasKey(x => x.Id)
            .ToTable("Login");

modelBuilder.Entity<Login>()
            .HasOptional(x => x.CreatedBy)
            .WithMany()
            .Map(x => x.MapKey("ForeignKeyColumn"));
Run Code Online (Sandbox Code Playgroud)