映射实体和从实体框架继承';s新的母公司的实体';的属性
本文关键字:实体 母公司 属性 映射 框架 继承 | 更新日期: 2023-09-27 18:21:24
我使用的是实体框架。我的.net框架是3.5,由于公司的政策,我无法改进它。我的模型是数据库优先,我有一个名为RequestMaster
的实体。我不想直接使用它,然后我为每个实体创建了一个派生类,继承它
现在假设我的RequestMaster是:
public class RequestMaster
{
public int RequestId{ get; set; }
public RequestType RequestType { get; set; }
}
派生类为:
public class Request : RequestMaster
{
public List<Request> SelectAll()
{
return _dataContext.RequestMaster
.Include("RequestType")
.Select(x => new Request()
{
RequestId = x.RequestId,
RequestType = x.RequestType,
}).ToList();
}
}
然后我用它:
var req = new Request ();
_request = req.SelectAll();
我的问题是所有属性(RequestId和RequestType)都是零或null,我已经检查过了,发现一切都很好,但问题是RequestMaster到Request的映射。我更改了请求并覆盖了RequestMaster的属性,问题解决了!
public class Request : RequestMaster
{
public new int RequestId { get; set; }
public new int RequestType { get; set; }
public void SelectAll()
{
return _dataContext.RequestMaster
.Include("RequestType")
.Select(x => new Request()
{
RequestId = x.RequestId,
RequestType = x.RequestType,
}).ToList();
}
}
有人能告诉我我的映射出了什么问题,以及新房产是如何解决的吗?
您不需要继承:
- 要将结果整形为
Request
,甚至不需要继承,只需整形即可 - 要向
RequestMaster
添加方法,不需要继承,只需装入另一个文件并创建一个public partial class RequestMaster
,然后向其中添加方法public List<RequestMaster> SelectAll()
或public List<Request> SelectAll()
即可 - 要从基本实体驱动一个类并使映射仍然有效,您应该在EF中使用标准的继承机制,例如
Table Per Type
但总的来说,我强烈建议不要这样做,而是将关注点分开,并使用不同的类(例如RequestMasterBusinessLogic
)来包含该逻辑,你也可以在这个类中塑造你的实体,如果你真的也需要一个Request类,那么在RequestMasterBusinessLogic
中编写这个代码,而不需要从RequestMaster
:派生
public partial class RequestMasterBusinessLogic
{
private YourDataContext Context;
public RequestMasterBusinessLogic()
{
Context= new YourDataContext();
}
public List<RequestMaster> SelectAll()
{
Context.RequestMaster.Include("RequestType").ToList();
}
public List<Request> SelectAllRequests()
{
Context.RequestMaster
.Include("RequestType")
.Select(x => new Request()
{
RequestId = x.RequestId,
RequestType = x.RequestType,
}).ToList();
}
}