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



假设我有这两个类:

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],但显然我想摆脱它,并将其映射。我如何(正确地)映射它?

您可以通过使用适当的导航属性扩展您的类来实现这一点,以便按照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; }            
}

相关内容

  • 没有找到相关文章

最新更新