我正在使用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());
}
我不知道为什么它不会在文章上崩溃..
数据库是最新的。
答案 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在源代码管理中。