C#Entity Framework将DBSet转换为继承自相同DBSet的扩展实体

时间:2015-03-11 19:39:04

标签: c# entity-framework inheritance

首先,我在没有运气的情况下搜索了这个解决方案。

这是我的设置。

我有2个项目。

acme.data
acme.WebApi

acme.data是我所有的Code First Classes所在的地方。

在以下命名空间中 acme.data.models我有一个Office对象(其属性如OfficeName,Address等)

我使用命名空间acme.WebApi.Models在acme.data.Models中的Entity类上添加扩展

所以我有acme.WebApi.Models.Office(其中包含GetFormattedAddress等方法)。

acme.WebApi.Models.Office继承自acme.data.Models.Office,以便我可以从acme.WebApi访问基本acme.data.Models.Office和扩展的acme.WebApi.Models.Office。 Models.Office

例如,

acme.WebApi.Models.Office office = myOffice.GetFormattedAddress();

acme.WebApi.Models.Office office = myOffice.OfficeName();

这部分效果很好。 然而,

当我第一次尝试加载像这样的办公室时。

acme.WebApi.Models.Office office = db.Offices.FirstOrDefault();

我收到一个编译时错误,说它无法隐式转换类型acme.data.Models.Office到acme.WebApi.Models.Office

所以我添加了“as acme.WebApi.Models.Office”将acme.data.Models.Office首先转换为acme.WebApi.Models.Office,就像这样。

acme.WebApi.Models.Office office = db.Offices.FirstOrDefault() as acme.WebApi.Models.Office

这允许构建2个项目,但是当我运行该行代码时,其设置办公室为Null。

所以我尝试以不同的方式强制转换Office对象。

acme.WebApi.Models.Office office = (acme.WebApi.Models.Office)db.Offices.FirstOrDefault();

它允许我构建两个项目,但在运行时我得到这个错误。 无法将“System.Data.Entity.DynamicProxies.Office_D07C530EAB71F08D12EDDE4E5A80ECBE23A75424CDCDF1DC799A05A37B3032A7”类型的对象强制转换为“acme.WebApi.Models.Office”。

有没有其他方法我应该将acme.data.Models.Office转换或转换为acme.WebApi.Models.Office,这不会让我不得不为每个Entity类制作转换方法?

谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

你为什么不回复acme.Data.Models.Office?

否则你可能会想要一些其他的共享类,并返回共享类。

acme.Data.Models.Office : acme.Shared.Model.Office

否则你要么

  1. 使用converter / ConvertTo()
  2. 将数据转换为WebApi
  3. 拥有一个WebApi模型,它采用数据模型并只包装属性。