Hello实体专家,
我已经使用EF工作了一段时间,并且我首先采用了代码优先的方法,它可以让你掌握更多信息。 现在我一直在研究一个不太大的项目,但我遇到了一些障碍(遗传问题就是其中之一)。现在我尝试了几种方法(注释,Fluent Api) 但是我的问题只是给出了另一个错误/异常消息,所以这就是为什么我要问你的建议/帮助。
我有以下实体:
YogaClass
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;}
}
YogaClassSubscription
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; }
}
WorkshopSubscription
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&amp;一个必需的帐户 WorkshopSubscription有一个必要的研讨会&amp;一个必需的帐户 帐户有一个List&amp;名单 这不是必需的。
当我播种时,我创建以下实体: Account1,Workshop1,YogaClass1, YogaClassSubscription1(有YogaClass1&amp; Account1)&amp; WorkshopSubscription1(有Workshop1&amp; Account1)
播种按预期进行,但在第一次寻址数据库时,它无法自行创建数据库。
似乎EF无法正确映射数据库,我尝试在YogaClassSubscription&amp ;;中设置属性int AccountID。 WorkshopSubscription类将其称为外键(注释和流畅的Api),但问题仍然存在。
Fluent 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的表为空。
所以我不知道如何为EF正确映射它。 我已经尝试了很多从stackoverflow提出的关于我得到的错误的答案,但没有一个解决了我的问题。
提前感谢您提出任何建议或帮助! 亲切的问候
答案 0 :(得分:0)
好的,所以我觉得很尴尬,经过一夜的睡眠,我开始思考并且很好,我首先有一个基类订阅哪个WorkshopSubscription&amp; YogaClassSubscription继承自。
在遇到几个问题后,我决定退出基类订阅,并在没有它的情况下继续。当然愚蠢我仍然有那些没有设置帐户的ctors,因为他们在基类中设置所以是的,你去,在ctor添加实体修复了我的问题。谢谢Kim Hoang的时间和建议!
亲切的问候