Zak*_*aki 3 polymorphism inheritance entity-framework asp.net-mvc-4
我是EF 新手,根据本教程,我设置了我的代码优先类,将基本调用TableA's
ID作为主键和外键TableB
如下所示:
[Table("TableA")]
public abstract class TableA
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string Description { get; set; }
}
[Table("TableB")]
public class TableB: TableA
{
[Key]
public int ID { get; set; }
public int Width { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在执行查询时在控制器中:
var a = db.TableB.ToList();
Run Code Online (Sandbox Code Playgroud)
tableB ID为0.但是在调试时我可以看到基类具有适当的ID.所以我做了一个循环,在里面用它分配了ID item.ID = ((TableA)(item)).ID;
.
上面的工作就像在它中分配ID所以我可以在我的视图中看到它们,但这是正确的方法吗?还有其他解决方案吗?
编辑: 这是dbcontext:
public class Context : DbContext
{
public ProductContext()
: base("DefaultConnection")
{
}
public DbSet<TableA> TableA { get; set; }
public DbSet<TableB> TableB { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在实体框架中处理继承时,您应该通过其父DbSet访问实体.这意味着在您的情况下,您应该通过您TableB
的TableA
房产访问您的实体DbContext
.该TableB
属性应删除.
如果您要查询,TableA
您将获得所有继承的实体TableA
(在您的情况下只有TableB
实体,但可能会有更多).如果要过滤到TableB
实体,可以使用如下OfType
方法:
from b in context.TableA.OfType<TableB>()
select b;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2023 次 |
最近记录: |