你好實體專家,實體框架的關係問題
我已經工作了一段時間,現在用EF和我preffer代碼第一種方法它可以讓你有更多的在手。 現在我一直在做一個不那麼大的項目,但我遇到了一些顛簸(繼承問題是其中之一)。現在我已經嘗試了幾種方法(註釋,流利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 &所需的帳戶 WorkshopSubscription都需要有一個車間& a required賬戶 賬戶有一個列表&列表 這是不需要的。
當我種子我創建以下實體: 帳戶1,車間1,YogaClass1, YogaClassSubscription1(其具有YogaClass1 &帳戶1)& WorkshopSubscription1(其具有車間1 &帳戶1)
播種變爲如預期的,但是當第一次尋址數據庫時創建數據庫本身失敗。
似乎EF無法正確映射數據庫,我嘗試在YogaClassSubscription中設置屬性int AccountID & WorkshopSubscription類將其引用爲外鍵(註釋和流暢的Api),但問題依然存在。
流利的API
modelBuilder.Entity<YogaClassSubscription>()
.HasRequired<Account>(ycs => ycs.Account)
.WithMany(ycs => ycs.YogaClassSubscriptions)
.HasForeignKey(ycs => ycs.AccountID);
我已經tryed給予臨時ID帳戶(在播種機),使EF能讓我指帳戶的兩個實例之間的差異,但是這仍然將無法工作(這解決了別人)。
林種丟了,我得到的是使用上的帳戶所需的註釋,在這兩種訂閱(因爲它應該工作
1) EF不能進行關聯的開始和結束之間的區別一個帳戶不需要訂閱,但任何訂閱都應該有一個帳戶)。
2)即有具有相同FK(從賬戶),這是正常的,但因爲其未插入尚未(不具有ID)它不能發揮作用appearantly 2個實例。
當我不使用任何註釋或流利的Api離開屬性虛擬時,它創建數據庫,但是應該引用accountID的表爲空。
所以我不知道EF如何正確映射它。 我已經嘗試了很多關於我得到的錯誤從stackoverflow提出的答案,但他們都沒有解決我的問題。
非常感謝您的任何建議或幫助! 親切的問候
您可以嘗試在您的YogaClassSubscription類中添加int AccountID和int YogaClassID。也可以通過WorkshopSubscription –
@Kim Hoang做同樣的事情,我對YogaClassID訂閱和WorkshopID沒有任何問題,訂閱時他們會正確地互相引用。我確實嘗試了你告訴我的,並得到以下行爲:**設置prop int AccountID **讓我這個錯誤=「需要帳戶字段」 **使用外部註釋在int AccountID prop ** 「無法確定在DataHandler.WorkshopSubscription類型的外鍵上使用複合外鍵排序在複合外鍵屬性上使用ForeignKey數據註釋時,請確保使用Column數據註釋或流暢API指定順序。 –
這使我振鈴,但我記得在過去像這樣的屋檐下:http://stackoverflow.com/questions/31594304/entity-framework-6-inverting-column-order-for-composite-foreign-keys哪裏您必須指定組合鍵上的順序。我今天會試試這個,讓你知道我的結果。親切的問候 –