属性“x”不是实体类型“y”

时间:2017-10-19 20:24:20

标签: c# asp.net-core entity-framework-core

我正在使用EF Core和ASP Core 2.0。使用最新的Identity框架。我在页面All上得到了这个例外。

  

InvalidOperationException:属性“User”不是实体类型“Gallery”的导航属性。 'Include(string)'方法只能与'。'一起使用。分隔的导航属性名称列表。

ApplicationUser看起来像:

public class ApplicationUser : IdentityUser<Guid>
{
    public ICollection<Gallery> Galleries { get; set; }
}

实体库看起来像:

public class Gallery
{
    public int Id { get; set; }
    public Guid UserId { get; set; }
    public string Title { get; set; }
    public int? ArticleId { get; set; }
    public string Photos { get; set; }
    public DateTime CreatedAt { get; set; }
    public DateTime UpdatedAt { get; set; }

    public Article Article { get; set; }
    public ApplicationUser User { get; set; }

    [NotMapped]
    public List<string> PhotosList
    {
        get { return Photos?.Split('|').ToList(); }
        set { Photos = string.Join("|", value); }
    }
}

Controller for View看起来像:

public async Task<IActionResult> All()
    {
        var databaseContext = db.Galleries.Include(x => x.Article).Include(x => x.User);

        return View(await databaseContext.ToListAsync());
    }

我不知道为什么它不会在文章上崩溃..

数据库是最新的。

2 个答案:

答案 0 :(得分:1)

添加ForeignKey属性

using System.ComponentModel.DataAnnotations.Schema;

...

[ForeignKey("Article")]
public int? ArticleId { get; set; }

[ForeignKey("User")]
public Guid UserId { get; set; }

您还可以将该属性放在导航属性

[ForeignKey("UserId")]
public ApplicationUser User { get; set; }

另外,请确保您的dbContext继承自IdentityDbContext<ApplicationUser, ...>

答案 1 :(得分:1)

如果您手动向模型添加额外的属性,则会遇到此问题。

要对其进行故障排除,请运行SQL Profiler并捕获RAW SQL,对数据库执行SQL,然后查看查询为什么不起作用,即哪个属性“ x”不是实体类型“ y”的导航属性。

然后转到模型并删除您手动添加的额外属性。

ps如果没有SQL dB,则可以使用其他探查器。或者,只需检查Diff在源代码管理中。