2016-12-20 114 views
0

你好實體專家,實體框架的關係問題

我已經工作了一段時間,現在用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提出的答案,但他們都沒有解決我的問題。

非常感謝您的任何建議或幫助! 親切的問候

+0

您可以嘗試在您的YogaClassSubscription類中添加int AccountID和int YogaClassID。也可以通過WorkshopSubscription –

+0

@Kim Hoang做同樣的事情,我對YogaClassID訂閱和WorkshopID沒有任何問題,訂閱時他們會正確地互相引用。我確實嘗試了你告訴我的,並得到以下行爲:**設置prop int AccountID **讓我這個錯誤=「需要帳戶字段」 **使用外部註釋在int AccountID prop ** 「無法確定在DataHandler.WorkshopSubscription類型的外鍵上使用複合外鍵排序在複合外鍵屬性上使用ForeignKey數據註釋時,請確保使用Column數據註釋或流暢API指定順序。 –

+0

這使我振鈴,但我記得在過去像這樣的屋檐下:http://stackoverflow.com/questions/31594304/entity-framework-6-inverting-column-order-for-composite-foreign-keys哪裏您必須指定組合鍵上的順序。我今天會試試這個,讓你知道我的結果。親切的問候 –

回答

0

行,所以我覺得akward的,一夜的睡眠之後,我開始想和好,我首先有一個基類認購這WorkshopSubscription & YogaClassSubscription從inherrited。

有幾個問題後,我決定離開基類認購,並繼續沒有它。當然,我很愚蠢,我仍然有那些沒有設置賬戶的客戶,因爲他們在基本類別中設置,所以是的,你去了,把這些實體添加到了我的問題。謝謝金晃你的時間和建議!

親切的問候