C# 提供一个方法在接口中返回一个实体
好的,我正在尝试为我的viewmodels创建一个接口,该接口提供了两个必需的方法和一个属性。给你C# 提供一个方法在接口中返回一个实体,c#,entity-framework,C#,Entity Framework,好的,我正在尝试为我的viewmodels创建一个接口,该接口提供了两个必需的方法和一个属性。给你 interface IVmConvertible { IVmConvertible Model { get; set; } Entity ConvertToModel(IVmConvertible target); IVmConvertible ConvertToViewModel(IVmConvertible target); } 我遇到的问题是抽象我的实体框架类,以便
interface IVmConvertible
{
IVmConvertible Model { get; set; }
Entity ConvertToModel(IVmConvertible target);
IVmConvertible ConvertToViewModel(IVmConvertible target);
}
我遇到的问题是抽象我的实体框架类,以便ConvertToModel
方法的返回类型将解释我的任何实体。我的ConvertToViewModel
方法很好,因为我的所有viewmodels都实现了这个接口。我曾想过为我的所有实体创建一个接口,但如果我更改自动生成的代码,它将在每次更改数据库时被删除
如何提取我的ConvertToModel
方法以返回任何实体?可能的解决方案是:
interface IVmConvertible<T>
{
IVmConvertible Model { get; set; }
T ConvertToModel(IVmConvertible target);
IVmConvertible ConvertToViewModel(IVmConvertible target);
}
此解决方案可能适合您的需要,也可能不适合您的需要。这是我们在这里做的事情,我不确定我是否完全理解您的要求。在这些示例中,我假设
实体
类使用不同的接口,而不是IVmConvertable
。我没有提到泛型(这可能是一个很好的方法,因为已经讨论过了)
手动操作
EntitesPartialClass.cs
public partial class MyEntityClass: IMyEntity {
....
}
最好是显式地实现接口,以便在能够使用方法之前强制调用方对其进行强制转换。因为您期望接口,所以这没有问题,但其他人不会感到困惑
public partial class MyEntityClass : IMyEntity {
IMyEntity.MyMethod() { }
}
如果您确实从基类派生,请使该基类以相同的方式实现接口
修改t4模板文件
我这样做是为了将edmx文件中的文档属性添加到类输出中
foreach(变量实体在…
)
public class CarVm : IVmConvertible<Car>
{
...
}
//-- original --
<#=Accessibility.ForType(entity)#><#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#>
/--original--
部分类
{
/--new---
部分类
:IMyEntity
{
//在TT文件中实现IMyEntity
泛型可能会有所帮助?
//-- original --
<#=Accessibility.ForType(entity)#><#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#>
//-- new ---
<#=Accessibility.ForType(entity)#><#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#>
: IMyEntity <#=code.StringBefore(", ", code.Escape(entity.BaseType))#>
{
// implement IMyEntity here, in the TT file