【发布时间】:2016-03-18 16:36:04
【问题描述】:
我将直接使用代码,然后解释我的问题,这样会更容易。提醒一下,我将实体框架 7 与 SQL Server 2014、ASP.NET 5 和 MVC 6 结合使用。
所以,我有以下课程:
public class Base {
public int BaseId { get; set; }
public string Name { get; set; }
}
public class DerivedOne : Base {
public virtual List<OtherDBObject> ListOne { get; set; }
}
public class DerivedTwo : Base {
public string SomeContent { get; set; }
}
我创建了从数据库中检索 Base 对象的存储库。问题是,DerivedOne 和 DerivedTwo 有不同的成员 - 我怎么知道要返回哪种类型(要进一步查询哪些成员)?
public class Repo : IRepo {
public async Task<Base> GetById(int id) {
// I though that this method should work something like this (its pseudo code) :
context.Base.Where(b => b.BaseId == id)
.switch(obj.type) {
case DerivedOne : query for OtherDBObjects
case DerivedTwo : query for string content somewhere else
...
}).First();
}
}
我的目标是拥有非常抽象的基类,其中只包含几个基本字段,而派生的可以完全不同。
PS 如果您对此任务有不同的结构,请随时发布!
【问题讨论】:
-
我不太确定您在这里要做什么,但您不能只查询 Base 对象,然后查看获取的对象是 DerivedOne 还是 DerivedTwo 类型?
-
嗯,是的,但它会被分成两个对数据库的查询——一个是获取 Base 然后检查它的类型,然后查询派生类的内容。我认为一个查询比两个更好 - 更少的开销。
-
基于对象类型检查的控制流 = 非常糟糕的设计。
-
@E-Bat 我知道,这就是我问的原因。你有什么建议吗?
标签: c# asp.net .net entity-framework asp.net-core-mvc