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

时间:2011-07-16 11:24:49

标签: entity-framework poco mapping-model

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

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 个答案:

答案 0 :(得分: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"));