【问题标题】:EF Code First foreign key with multiple keys具有多个键的EF Code First外键
【发布时间】:2014-04-18 14:21:50
【问题描述】:

我有一个可以有多个事件日期的事件表。我已经对此错误进行了一些研究,但看起来我已经正确设置了所有内容,但是我是代码优先方法的新手,我认为我的困惑来自于重写 OnModelCreating

One or more validation errors were detected during model generation:

Event_EventDates_Source_Event_EventDates_Target: : The number of properties in the Dependent and Principal Roles in a relationship constraint must be identical.



[Table("EventDates")]
public class EventDate
{
    [Key, Column(Order=1)]
    public int EventDateId { get; set; }
    [Key, Column(Order = 2)]
    public DateTime EventDateStart { get; set; }
    public DateTime? EventEnd { get; set; }
    public string TicketPurchaseUrl { get; set; }
}

[Table("Events")]
public class Event
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int EventId { get; set; }
    ...
    public int EventDateId { get; set; }
    public DateTime EventDateStart { get; set; }
    [ForeignKey("EventDateId, EventDateStart")]
    public virtual ICollection<EventDate> EventDates { get; set; }
}

【问题讨论】:

    标签: c# database entity-framework ef-code-first foreign-keys


    【解决方案1】:

    对于您描述的业务逻辑,您的模型有点奇怪。如果Event 可以有多个EventDates,则Event 中不应有引用EventDate 的外键,但反过来:EventDate 中的外键引用Event 并且可能EventDate中的导航属性Event

    [Table("EventDates")]
    public class EventDate
    {
        public int EventDateId { get; set; }
    
        public int EventId { get; set; }
        [ForeignKey("EventId")]
        public Event Event { get; set; }
    
        public DateTime EventDateStart { get; set; }
        public DateTime? EventEnd { get; set; }
        public string TicketPurchaseUrl { get; set; }
    }
    
    [Table("Events")]
    public class Event
    {
        public int EventId { get; set; }
    
        public virtual ICollection<EventDate> EventDates { get; set; }
    }
    

    按照约定,EventDate.EventDateIdEvent.EventId 将是键,它们将自动生成。我建议您省去在EventDate 中将DateTime 作为复合键的一部分的麻烦。如果您真的不需要这样的复合键,只需使用 int 身份作为键即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 2014-10-02
      • 2017-07-02
      • 1970-01-01
      相关资源
      最近更新 更多