映射实体和从实体框架继承';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();
        }
    }

有人能告诉我我的映射出了什么问题,以及新房产是如何解决的吗?

映射实体和从实体框架继承';s新的母公司的实体';的属性

您不需要继承:

  • 要将结果整形为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();
    }
}