【发布时间】:2021-03-09 16:44:03
【问题描述】:
每当我尝试调试我的 .NET Core 5 时,都会收到此错误 -
“System.InvalidOperationException”类型的未处理异常 发生在 System.Private.CoreLib.dll: '该属性 'Report.CampaignIds' 无法映射,因为它的类型 'int[]',它不是受支持的原始类型或有效实体 类型。要么显式映射此属性,要么使用 '[NotMapped]' 属性或使用 'EntityTypeBuilder.Ignore' 'OnModelCreating'。'
不知道如何解决它,但我知道错误来自哪里。
这是我的模特
public class Report : EntityBase
{
public string ReportName { get; set; }
public DateTime DateFrom { get; set; }
public DateTime DateTo { get; set; }
public string[] Locals { get; set; }
public string[] Regions { get; set; }
public int[] CampaignIds { get; set; }
public int[] AgentIds { get; set; }
public IList<Campaign> Campaigns { get; set; }
public IList<User> Agents { get; set; }
}
在 OnModelCreating 方法中我有这个
modelBuilder.Entity<Report>().Property(x => x.Locals).HasConversion(y => string.Join(',', y), y => y.Split(',', System.StringSplitOptions.RemoveEmptyEntries));
modelBuilder.Entity<Report>().Property(x => x.Regions).HasConversion(y => string.Join(',', y), y => y.Split(',', System.StringSplitOptions.RemoveEmptyEntries))
我假设在建筑物中我需要将活动 ID 映射到活动模型。
问题是我现在如何将campaignIds 和agentIds 保存在数据库中,只保存本地人和地区。
为多对多关系创建的类。
public class ReportCampaign
{
public int Id { get; set; }
public Campaign Campaign { get; set; }
public Report Report { get; set; }
}
【问题讨论】:
-
我认为你的做法是错误的。
CampaignIds是否引用另一个实体/表?如果是这样,您应该引入一个关系表(如果它是多对多关系),或者只让相关实体的 ID 指向Report。 -
是的,CampaignIds 它的另一个表和它的多对多关系。营销活动可以有很多报告,报告也可以有很多营销活动。我按照您的建议创建了这个课程。张贴在原始问题电话 ReportCampaign
-
没错,那么您就不需要
CampaignIds(我猜AgentIds也是如此)。相反,您需要确保 EF 将其视为many-to-many relation。 -
好的,谢谢。我是前端开发人员,而后端开发人员(受过培训)离开了公司,我在没有接受过培训的情况下陷入了困境,并期望了解所有这些东西。你拯救了我的一天。
-
正如错误所说,我认为您应该更改 CampaignIds 的数据类型。它说你不能在你的数据库中保存这种类型。
标签: c# entity-framework .net-core entity-framework-core