对于工作,我们有特定类型的记录,但每个项目都有自己的实现。列等不同,但大体流程是一样的(记录分为批次、批次分配、批次完成、批次退回、批次发出等)。许多列也很常见,但有时名称会发生变化(一个中的 BatchId 与另一个中的 Id。[Column("name")] 解决了这个问题)。
目前,这就是我使用接口中给出的通用组件实现批处理分配功能的方法:
public interface IAssignment
{
// properties
...
// methods
T GetAssignmentRecord<T>(int UserId, int BatchId) where T : IAssignment;
List<T> GetAssignmentRecords<T>(int UserId) where T : IAssignment;
}
现在我目前有两个具有批量分配的项目。由于这些是在 EntityFramework 中完成的,Namespace1 中的分配和 Namespace2 中的分配是完全不同的事情,但受某些通用组件(ID、分配的用户、签入等)的约束,这些组件驱动所有返回它们的方法。
我认为我的主要问题是我是否做错了,是否有更好的方法来实现这一点,以便我可以将数据传输到我的控制器中,并让控制器看起来有点类似于项目的项目,同时有尽可能多的方法工作被自动处理(主要是当我需要更新时会出现“修复一个,修复所有”场景)。
下面是我如何为 namespace1 进行实现的示例:
public class Assignment
{
...
public T GetAssignmentRecord<T>(int UserId, int BatchId) where T : IAssignment
{
var db = new Database1Context();
return (T) Convert.ChangeType(db.Assignment.Where(c => c.UserId == UserId && c.BatchId == BatchId && c.Assigned).First(), typeof(T));
}
}
在控制器中:
Assignment assignment = new Assignment();
var record = assignment.GetAssignmentRecord<Assignment>(userid, batchid);
// do stuff
控制器代码实际上是我假设它会工作的方式。我已经完成了作业课程,现在如果我以正确的方式做这件事,我会感到困惑。我觉得这可能不正确的原因是我基本上是在说“接口正在寻找一个泛型,我使用实体框架从数据库中获取一个强类型对象,我将它转换为泛型,当我'正在提出请求,我正在请求我最初转换为泛型的相同强类型对象。”
有没有更好的方法来做到这一点?还是我应该走的完全不同的方向?