日期:2014-05-20 浏览次数:20840 次
/// <summary>
/// 仓库类
/// </summary>
public class EFRepository<TEntity> : Domain, IRepository<TEntity> where TEntity : class
{
public EFRepository( )
{
this.ListType = typeof(TEntity);
}
public IList<TEntity> GetAll( )
{
//获取所有实体数据
}
}
仓库API设计:
public static class EF
{
//根据实体读取仓库
public static EFRepository<TEntity> Create<TEntity>( ) where TEntity : class
{
return EFRepositoryFactory.Instance.Find<TEntity>();
}
//直接读取仓库
public static EFRepository<TEntity> Concreate<TEntity>( ) where TEntity : class
{
return new EFRepository<TEntity>();
}
}
//==============User仓库实现=============================================
/// <summary>
/// 用户
/// </summary>
[Serializable]
public class User : Entity<User>
{
public string Code { set; get; }
public string Name { set; get; }
public string Password { set; get; }
protected IList<User> QueryBy(string code)
{
return this.QueryDb(q => q.Code.Equals(code));
}
}
/// <summary>
/// 用户仓库类 GetByCode和GetBy 是所有用户仓库类的其他仓库没有的。
/// </summary>
public class UserRepository : EFRepository<User>
{
protected UserRepository( ) { }
public User GetByCode(string code)
{
return this.FetchFirstAs<User>(code);
}
public User GetBy(string code, string password)
{
var user = this.GetByCode(code);
if (user != null && user.Password == password) { return user; }
return null;
}
}
//====================测试=========================================
[TestMethod]
public void GetAll( )
{
var list = EF.Create<User>().GetAll();
}
[TestMethod]
public void TestCreateConcreate( )
{
/*
效果: 使用EF读取UserRepository仓库并且调用GetByCode函数
问题: 在这里不能调用GetByCode函数?不知道EF类需要如何修改。
*/
var list = EF.Concreate<UserRepository>().GetByCode("");
}