Entity framework关系问题

Entity framework relations issue

我已经使用 EF 工作了一段时间,我更喜欢代码优先的方法,它可以让你掌握更多。 现在我一直在做一个不太大的项目,但我遇到了一些困难(继承问题就是其中之一)。现在已经尝试了几种方法(注解,FluentAPI) 但我的问题只是给出了另一个 error/exception 消息,所以这就是为什么我在这里问你的 suggestions/help.

我有以下实体:

瑜伽课

public class YogaClass
    {
      [Key]
      public int YogaClassID { get; set; }
      public virtual List<YogaClassSubscription> YogaClassSubscribtions {get; set;}
}

工作坊

public class Workshop
    {
        [Key]
       public int WorkShopID { get; set; }
       public virtual List<WorkshopSubscription> WorkshopSubscribtions { get; set;}
}

瑜伽课订阅

public class YogaClassSubscription
    {
        [Key]
        public int YogaClassSubscriptionID { get; set; }

        [Required]
        public virtual Account Account { get; set; }

        //[ForeignKey("Account")]
        //public int AccountID { get; set; }

        [Required]
        public virtual YogaClass YogaClass { get; set; }
}

研讨会订阅

 public class WorkshopSubscription
    {
        [Key]
        public int WorkshopSubscriptionID { get; set; }

        [Required]
        public virtual Account Account { get; set; }

        //[ForeignKey("Account")]
        //public int AccountID { get; set; }

        [Required]
        public virtual Workshop Workshop { get; set; }
}

帐号

public class Account
    {
    [Key]
    public int AccountID { get; set; }
    public virtual List<YogaClassSubscription> YogaClassSubscriptions { get; set; }
    public virtual List<WorkshopSubscription> WorkshopSubscriptions { get; set; }

}

哪里: YogaClassSubscription 有一个必需的 YogaClass 和一个必需的帐户 WorkshopSubscription 有一个必需的 Workshop 和一个必需的帐户 帐户有一个列表和列表 这不是必需的。

当我播种时,我创建了以下实体: Account1 , Workshop1 , YogaClass1 , YogaClassSubscription1(具有 YogaClass1 和 Account1)& WorkshopSubscription1(其中有 Workshop1 和 Account1)

播种按预期进行,但是在第一次访问数据库时,它无法创建数据库本身。

似乎 EF 无法正确映射数据库,我尝试在 YogaClassSubscription 和 WorkshopSubscription class 中设置一个 属性 int AccountID,将其称为外键(注释和流利 API ) 但问题仍然存在。

流利API

modelBuilder.Entity<YogaClassSubscription>()
.HasRequired<Account>(ycs => ycs.Account)    
.WithMany(ycs => ycs.YogaClassSubscriptions)
.HasForeignKey(ycs => ycs.AccountID); 

我已经尝试为帐户(在播种机中)提供一个临时 ID,以便 EF 可以区分我所指的帐户的 2 个实例,但这仍然行不通(为某人解决了这个问题)否则)。

我有点迷路,我明白了

1) EF 无法在两个订阅中使用帐户上所需的注释来区分关联的开始和结束(这应该有效,因为帐户不必须有订阅,但任何订阅都应该有一个帐户)。

2) 有 2 个实例具有相同的 FK(来自帐户),这是正常的,但由于尚未插入(具有任何 ID),因此不能明显有所作为。

当我不使用任何注释,或者流利的 API 将属性保留为虚拟时,它会创建数据库,但随后应该引用 accountID 的 table 为空。

所以我不知道如何让 EF 正确映射它。 我已经尝试了很多 Whosebug 提出的关于我得到的错误的答案,但是 none 解决了我的问题。

提前感谢您的任何建议或帮助! 亲切的问候

好吧,我觉得很尴尬,经过一夜的睡眠,我开始思考,嗯,我首先有一个基础 class Subscription 继承了 WorkshopSubscription 和 YogaClassSubscription从。

在遇到几个问题后,我决定放弃基础 class 订阅并在没有它的情况下继续。当然,愚蠢的我,我仍然有那些没有设置帐户的 ctors,因为他们在基础 class 中设置,所以是的,你去吧,在 ctor 中添加实体解决了我的问题。感谢 Kim Hoang 的宝贵时间和建议!

亲切的问候