如何在EF 4.1 code first中映射父列

4
在我的项目中,我有以下的领域模型。
public class Login
{
    public Guid Id { get; set; }
    public Login CreatedBy {get; set; }
}

我正在使用以下的流畅配置:

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

modelBuilder.Entity<Login>()
            .HasOptional(x => x.CreatedBy)
            .WithMany()
            .HasForeignKey(x => x.CreatedBy);

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

return from d in Db.Logins.Include("CreatedBy") 
       select d;

当我执行代码时,出现以下错误:

外键组件“CreatedBy”在类型“Login”上未声明为属性。请验证它是否未被明确地从模型中排除,并且它是有效的基元属性。

有人能建议我在这里做错了什么吗?

提前感谢。

1个回答

5

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

你的外键映射.HasForeignKey(x => x.CreatedBy)没有使用一个原始属性。

public class Login
{
    public Guid Id { get; set; }
    public virtual Login CreatedBy {get; set; }
}

然后像这样进行映射。
modelBuilder.Entity<Login>()
            .HasKey(x => x.Id)
            .ToTable("Login");

modelBuilder.Entity<Login>()
            .HasOptional(x => x.CreatedBy)
            .WithMany()
            .Map(x => x.MapKey("ForeignKeyColumn"));

谢谢您的回复。实际上,我不想改变我的领域模型,因为我认为我的领域模型是正确的。我不想为ORM更改我的领域模型。只是想知道如何告诉我的ORM将CreatedBy加载为Login对象? - learner
@learner编辑了答案。使用Map(x => x.MapKey("ForeignKeyColumn"))来配置外键列。 - Eranga
出现相同的错误。外键组件“CreatedBy”在类型“Login”上未声明为属性。请验证它是否未被明确地从模型中排除,并且它是一个有效的基元属性。 - learner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接