【发布时间】:2015-06-03 13:34:20
【问题描述】:
我正在尝试构建一个通用存储库并且遇到了一些问题。我有如下界面:
public interface IGenRepo<T, TKey> where T : class
{
IQueryable<T> Items { get; }
T find(TKey pk);
RepoResult delete(TKey pk);
RepoResult create(T item);
RepoResult update(T item);
RepoResult save();
}
这是实现该接口的类:
public class EFGenRepo<T, TKey> : IGenRepo<T, TKey> where T : class
{
private PortalEntities context = new PortalEntities();
public IQueryable<T> Items { get { return context.Set<T>().AsQueryable<T>(); } }
public T find(TKey pk){}
public RepoResult delete(TKey pk){}
public RepoResult create(T item){
if (item == null) return RepoResult.Failed(RepoMessages.paramIsNull());
if (true) {//HELP HERE PLEASE, something like: if(item.PKHasNoValue == true)
context.Set<T>().Add(item);
return save();
} else {
return RepoResult.Failed(RepoMessages.PKIsNotZeroAtCreate());
}
}
public RepoResult update(T item){}
public RepoResult save(){
try {
context.SaveChanges();
return new RepoResult();
} catch (Exception e){
return RepoResult.Failed(RepoMessages.saveChangesFailure(e));
}
}
private RepoResult save(T item){}
}
在我的创建方法中,我想检查传递给该方法的项目的 PK 值。我知道我可以在调用代码之前在我的控制器中检查它,但我想这样做!所以,假设我有一个如下的学生班:
public partial class student
{
public int id { get; set; }
public string naam { get; set; }
}
传递一个 id 为 0 的学生对象,现在我希望 if 语句评估为真。如果学生对象已经有一个 id,它必须评估为 false。但是我该如何检查这个。我想我必须使用类似下面的代码,但我没有这方面的技能:
typeof(TKey).Name;
item.GetType().Name;
非常感谢任何帮助!
【问题讨论】:
标签: c# entity-framework-6 asp.net-mvc-5.2 .net-4.5.2