繁体   English   中英

实体类型不能共享同一个表 (EF6)(一对多关系)

[英]Entity Types Cannot Share the same table (EF6) (One to Many Relationship)

无论我如何尝试配置,都会出现此错误。 我试图使用 EF6 建立一对多关系(一个历史数据到多个跟踪数据)并手动设计具有该关系的表。

这是表格设计:

在此处输入图像描述

如图所示,历史跟踪表有一列引用历史表中的 id 并生成外键。

这是历史表 class:

[Table("trx_history_forecast_tracking")]
    public class TrxHistoryForecast
    {
        public TrxHistoryForecast()
        {
            this.Tracking = new HashSet<TrxHistoryForecastTracking>();
        }

        [Key]
        [Column("id")]
        [Display(Name = "Id")]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int Id { get; set; }

        [Column("trx_id")]
        [Display(Name = "Transaction ID")]
        public string TransactonID { get; set; }

        [Column("current_activity")]
        [Display(Name = "Current Activity")]
        public string CurrentActivity { get; set; }

        [Column("send_date")]
        [Display(Name = "Send Date")]
        public DateTime SendDate { get; set; }

        [Column("user_create")]
        [Display(Name = "User Create")]
        public string UserCreate { get; set; }

        [Column("user_modify")]
        [Display(Name = "User Modified")]
        public string UserModified { get; set; }

        [Column("create_date")]
        [Display(Name = "Create Date")]
        public DateTime CreateDate { get; set; }

        [Column("modified_date")]
        [Display(Name = "Modified Date")]
        public DateTime? ModifyDate { get; set; }

        public ICollection<TrxHistoryForecastTracking> Tracking { get; set; }
    }

这是跟踪 class:

[Table("trx_history_forecast_tracking")]
    public partial class TrxHistoryForecastTracking
    {
        [Key]
        [Column("id")]
        [Display(Name = "Id")]
        public int Id { get; set; }

        [Column("activity_name")]
        [Display(Name = "Activity Name")]
        public string ActivityName { get; set; }

        [Column("activity_finish_date")]
        [Display(Name = "Activity Finish Date")]
        public DateTime ActivityFinishDate { get; set; }

        [Column("activity_user")]
        [Display(Name = "Activity User")]
        public string ActivityUser { get; set; }

        [Column("activity_action")]
        [Display(Name = "Activity Action")]
        public string ActivityAction { get; set; }

        [Column("user_create")]
        [Display(Name = "User Create")]
        public string UserCreate { get; set; }

        [Column("create_date")]
        [Display(Name = "Create Date")]
        public DateTime CreateDate { get; set; }
        public virtual TrxHistoryForecast HistoryForecast { get; set; }
    }

但是,当我尝试调试时,出现此错误:

System.InvalidOperationException:“实体类型‘TrxHistoryForecastTracking’和‘TrxHistoryForecast’不能共享表‘trx_history_forecast_tracking’,因为它们不在同一类型层次结构中,或者不具有有效的一对一外键关系以及它们之间匹配的主键。”

知道如何解决吗?

乍一看,我认为您需要 TrxHistoryForecastTracking 中的外键

public partial class TrxHistoryForecastTracking
{   
    .... the other properties/columns here....
    [Column(trx_history_forecast_tracking_id)]
    [ForeignKey("HistoryForecast ")]
    public int TrxHistoryForecastId { get; set; }
    public virtual TrxHistoryForecast HistoryForecast { get; set; }
}

这样,将在表trx_history_forecast_tracking中创建一个外键列。 此外, TrxHistoryForecast class 上的表属性应具有值[Table("trx_history_forecast")] ,即没有_tracking后缀。 现在您正在尝试创建两个指向同一个数据库表的实体类。 您实际上需要将 map 实体类添加到数据库中的两个不同表中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM