如何使用实体框架将表映射到可枚举属性? (数据库优先)

时间:2016-09-29 16:05:13

标签: entity-framework

假设我有这两个类:

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);
}

我有其他数据,但到目前为止我刚刚在MyDataCollection属性上面写了[NotMapped],但显然我想摆脱它并将其映射。我如何(正确)映射它?

1 个答案:

答案 0 :(得分: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; }
}

确保在dbcontext中声明这两个实体,如下所示

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

    }

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