2017-06-28 39 views
0

我有一個EF代碼第一個討厭的問題,我需要一些幫助。我有一個Student,它從Person繼承。學生可以有像Worker這樣的朋友,也可以繼承人。EF代碼第一,孩子擁有父對象列表

class Person 
{ 
    public int Id { get; set; } 
    //... 
} 

class Student : Person 
{ 
    public virtual List<Person> Friends { get; set; } 
    //... 
} 

class Worker : Person 
{ 
    //there are other classes like this one 
} 

這是例外,我得到的,如果我嘗試實體寫信給我的SQLite數據庫:

與身份的成員「PersonSelf」元數據集合中不存在。

如果我將列表更改爲例如Worker它正在工作,但不是Person。 我可以改變什麼來解決這個問題?感謝您的幫助。

+0

當在表上使用觸發器時,一些Google搜索會顯示類似的問題。你有觸發器嗎? – Sentry

+0

我搜索了很多,發現確實存在一些類似的問題,但不幸的是,不完全是這種具有多態性的問題。我沒有使用觸發器作爲票價,因爲我知道... – Nindalf

+0

你能提供更多關於你的表如何實現層次結構的細節嗎? TPH還是TPC?而且因爲Friends是一個n-m的關係,你有一個表嗎? – Sentry

回答

0

謝謝你的提示。爲了解決這個問題,你需要告訴EF在DB中創建一個映射表。原因是因爲這是一個「多對多」問題。

請考慮我的其他post

public class ModelConfiguration 
    { 
     private static void ConfigureGridDataCollectionEntity(DbModelBuilder modelBuilder) 
     { 
      // Student 
      modelBuilder.Entity<Student>() 
       .HasMany(p => p.Friends) 
       .WithMany() 
       .Map(cs => 
       { 
        cs.MapLeftKey("StudentId"); 
        cs.MapRightKey("FriendsId"); 
        cs.ToTable("StudentFriend"); 
       }); 
     } 
    } 
1

你不應該有任何問題如果你已經定義好你的模型和db上下文,我想。我在github上創建了一個小回購來測試你的模型。這裏是鏈接 github repo 我的模型是非常非常簡單:

public class Person 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

} 
public class Student : Person 
{ 
    public Student() 
    { 
     Friends=new List<Person>(); 
    } 
    public virtual List<Person> Friends { get; set; } 
    public int StudentAge { get; set; } 
} 
public class Worker : Person 
{ 
    public decimal WorkerSalary { get; set; } 
} 

我使用DOTNET的核心,我是能夠創建數據庫和插入數據。

請檢查回購,讓我知道如果它適合你。