4

在我的项目中,我有以下 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”类型的声明属性。验证它没有被明确地从模型中排除,并且它是一个有效的原始属性。

谁能建议我在这里做错了什么?

提前致谢

4

1 回答 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"));
于 2011-07-16T11:42:29.477 回答