EF Core ignores ModelMetadataType



我们使用的是.NET Core 2.2。我们在数据注释中使用了数据库优先的方法。我们有以下型号:

Issue.cs

[Table("issue", Schema = "abc")]
public partial class Issue
{
[Column("id")]
public int Id { get; set; }

[Column("summary")]
[StringLength(255)]
public string Summary { get; set; }
}

Issue.partial.cs

[ModelMetadataType(typeof(IssueMetaData))]
public partial class Issue
{
public bool IsPublic { get; set; }
}
public class IssueMetaData
{
[NotMapped]
public bool IsPublic { get; set; }
}

如果我运行以下查询。。。

var issue = _dbContext.Issue.FirstOrDefault(x => x.Id == 2406);

我得到以下错误:

Npgsql。PostgresException:"42703:列x.IsPublic不存在">

看起来元数据类被忽略了。如果我在Issue.partial.cs中将[NotMapped]移动到public partial class Issue,则它正常工作。两个分部类都在同一个命名空间中。

我做错了什么?

ModelMetadataTypeAttribute是ASP的一部分。NET核心,并存在于Microsoft.AspNetCore.Mvc命名空间和相应的dll中。EF Core不依赖ASP。NET Core,所以它对这个属性一无所知,也无法对其进行分析。

正如@Ivan Stoev在评论中建议的那样,您可以在上下文中使用流利的API在OnModelCreating方法中配置您的模型。类似这样的东西:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Issue>().Ignore(c => c.IsPublic);
}

相关内容

  • 没有找到相关文章

最新更新