2016-09-29 2 views
0

Предположим, что я имел эти два класса:Как сопоставить таблицу с перечислимым свойством с использованием структуры сущностей? (База данных первого)

public class MyClass { 
    public int Id { get; set; } 
    public IEnumerable<MyData> MyDataCollection { get; set; } 
} 

public class MyData { 
    public int DataId { get; set; } 
    public string Data { get; set; } 
    public int Id { get; set; } 
} 

и у меня было две таблицы в моей базе данных:

MyClasses: 
Id 
1 
2 


MyDatas: 
DataId  Id  Data 
1  - 1 - "Hello" 
2  - 1 - "World" 
3  - 2 - "Hello World" 

Как использовать структуру сущностей, чтобы связать их, так что я можно сделать:

using (var db = new DataContext()) { 
    var data = db.MyClass.Where(c => c.ID == 1).MyDataCollection; 
    foreach (var item in data) Console.WriteLine(item.Data); 
} 

у меня есть другие данные, но до сих пор я только что написал [NotMapped] выше MyDataCollection собственности, но очевидно, что я хочу избавиться от этого и отобразить его. Как мне (правильно) отобразить его?

+0

MyDataCollection - это обычное свойство навигации. Явным образом сопоставляю внешний ключ, так как он не соответствует первым правилам кода, и вам хорошо идти. – DevilSuichiro

ответ

1

Вы можете сделать это путем расширения вашего класса с соответствующими навигационными свойствами для установления соединения между ними по следующим стандартам EF

public class MyClass { 
    public MyClass() 
    { 
     MyDataCollection = new List<MyData>(); 
    } 
    public int Id { get; set; } 
    public virtual ICollection<MyData> MyDataCollection { get; set; } 
} 

public class MyData { 
    public int DataId { get; set; } 
    public string Data { get; set; } 
    public int Id { get; set; } 
    public virtual MyClass MyClass { get; set; } 
} 

Убедитесь, что эти 2 лица объявлены в DbContext ниже

public class MyContext: DbContext 
{ 
    public MyContext(): base() 
    { 

    } 

    public DbSet<MyClass> MyClasses { get; set; } 
    public DbSet<MyData> MyDatas { get; set; }    
} 
+1

Мне любопытно, как это помогает? В основном вы только объявили свойство обратной навигации и DbSet. Но ограничение внешнего ключа не отображается в отношениях, и я сомневаюсь, что любые запросы работают, поскольку любой запрос в MyData должен использовать MyClassId как FK, а не DataId. – DevilSuichiro

Смежные вопросы