我有一些由Entity Framework创建和维护的类。这些类代表我的数据库中的表。在其中两个表中,我有非常相似的字段。例如(伪对象):
public class RandomObject1
{
int Identifier { get; set; }
int ObjectType { get; set; }
int SourceID { get; set; }
string OriginationPont { get; set; }
string PhoneNumber { get; set; }
decimal Cost { get; set; }
int OtherThing1 { get; set; }
int OtherThing2 { get; set; }
int OtherThing3 { get; set; }
}
public class RandomObject2
{
int Identifier { get; set; }
int ObjectType { get; set; }
int SourceID { get; set; }
string OriginationPont { get; set; }
string PhoneNumber { get; set; }
decimal Cost { get; set; }
double CashValue1 { get; set; }
decimal Snowman2 { get; set; }
int BigFurryTree3 { get; set; }
}
请注意,这两个对象的前几个字段是相同的,填充这些字段的过程也是相同的。通常在这些情况下,我会有一个接口,只声明前几个字段,以便我可以将此对象作为各种进程的接口传递。
但是,在这种情况下,我不控制构建这些类的代码,并且实际上不希望每次都必须从Entity Framework编辑生成的.cs文件再生。
我想知道是否有一种光滑的方式,我缺少使用泛型来执行以下操作:
// This method will populate SourceID, OriginationPoint, PhoneNumber and Cost
public void GenerateOriginationInformation<T>(ValidationInformation info, T objectToManipulate) where T : RandomObject1 || RandomObject2
{
objectToManipulate.SourceID = GenerateSourceID(info);
objectToManipulate.OriginationPoint = GenerateOriginationPoint(info);
objectToManipulate.PhoneNumber = FindPhoneNumberByOrigination(info);
objectToManipulate.Cost = DetermineCostBySourceAndOrigination(info);
}
现在,我必须构建一个完整的对象/图层来填充并返回正确的对象,但这会导致我为这些东西做两次代码!
public void GenerateOriginationInformation(ValidationInformation into, RandomObject1 objectToManipulate)
{
objectToManipulate.SourceID = GenerateSourceID(info);
objectToManipulate.OriginationPoint = GenerateOriginationPoint(info);
objectToManipulate.PhoneNumber = FindPhoneNumberByOrigination(info);
objectToManipulate.Cost = DetermineCostBySourceAndOrigination(info);
}
public void GenerateOriginationInformation(ValidationInformation into, RandomObject2 objectToManipulate)
{
objectToManipulate.SourceID = GenerateSourceID(info);
objectToManipulate.OriginationPoint = GenerateOriginationPoint(info);
objectToManipulate.PhoneNumber = FindPhoneNumberByOrigination(info);
objectToManipulate.Cost = DetermineCostBySourceAndOrigination(info);
}
起初,这看起来并不太糟糕,但出于解释和简洁的目的,此代码高度过度简化。是否有一种更简洁的方法来使用泛型来使两种方法一起工作,因为我无法实现接口?
答案 0 :(得分:6)
I don't control the code that builds these classes, and really don't want to have to edit the resulting .cs files from the Entity Framework every time it is regenerated
回答评论:&#34;它是EDMX&#34;
默认情况下,EDMX设计器生成的类是部分的(您无需额外的工作),因此您可以使用partial
创建生成文件旁边的代码文件在其中使类型实现接口。
生成的课程
public partial class RandomObject1
您的代码文件放在同一个项目中
public partial class RandomObject1 : ICommonInterface
答案 1 :(得分:5)
实体框架生成的类可能是“部分”的。这意味着您可以编写自己的分部类,以将自己的功能添加到该生成的类中。
如:
public partial class RandomObject1: ICommonInterface
{
}
使用“ICommonInterface”指定共享属性的接口。