当我创建我的存储库时,我假设每个 EntityObject 都有 ID 属性。然后我创建了存储库:
public class Repository<T> : IRepository<T> where T : EntityObject, IBasicEntityInfo
IBasicEntityInfo:
public interface IBasicEntityInfo
{
int ID { get; set; }
}
然后
OrderBy(a => a.ID)
自动生成的EntityObject类没有实现IBasicEntityInfo接口,但是我使用T4来生成:
public partial class User : IBasicEntityInfo ,ILastModificationInfo
public partial class Project : IBasicEntityInfo ,ILastModificationInfo
public partial class Group : IBasicEntityInfo ,ILastModificationInfo
public partial class GroupUser : IBasicEntityInfo
public partial class OperationSystem : IBasicEntityInfo ,ILastModificationInfo
T4 很简单:
<#@ template language="C#" #>
<#@ output extension="cs" #>
<#@ import namespace="System.Collections.Generic" #>
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Web;
<#
String[] classNames = new String[] {"User","Project","Group","GroupUser","OperationSystem","TaskType","Priority","Severity","Status","Version","Platform","Task","TaskUser","Attachment","Comment","Setting"};
#>
namespace CamelTrap.Models
{
<# foreach(String className in classNames) { #>
public partial class <#= className #> : IBasicEntityInfo
{
}
<# } #>
}
做出这样的假设也解决了其他问题,让我免于创建复杂的表达式。