如何在 Entity Framework 中查找具有复合键的实体
How to find entity with composite key in Entity Framework
我有一个现有数据库,我在该数据库上使用代码优先 EF。现在数据库有一个 table 和一个复合键。我在代码中定义这个table如下
public class AssessmentResultType
{
[Key]
[Column(Order=1)]
public int AssessmentID {get; set;}
public int ResultType {get; set;}
[Key]
[Column(Order=2)]
public int ResultTypeID {get; set;}
.....
}
我的存储库是
public class AssessmentResultTypeRespository : Repository<AssessmentResultType>
{
public AssessmentResultTypeRespository(string connString)
:base(connString)
{ }
}
Repository.cs
public class Repository<TEntity> : IRepository<TEntity> where TEntity:class
{
protected readonly GradeXpertContext context;
public Repository(string connString) {
context = new ge(connString);
}
public TEntity Get(int id)
{
return context.Set<TEntity>().Find(id);
}
public IEnumerable<TEntity> GetAll() {
return context.Set<TEntity>().ToList();
}
public void Add(TEntity entity) {
context.Set<TEntity>().Add(entity);
}
public void AddRange(IEnumerable<TEntity> entities) {
context.Set<TEntity>().AddRange(entities);
}
public void Remove(TEntity entity) {
context.Set<TEntity>().Remove(entity);
}
public void RemoveRange(IEnumerable<TEntity> entities) {
context.Set<TEntity>().RemoveRange(entities);
}
}
如何adjust/override 上面的代码只在 AssessmentResultType
的情况下接受复合键?这样我就可以写
var art1 = repAssResultType.Get(32, 4);
只需改变一种方法:
public TEntity Get(params object[] keyValues)
{
return context.Set<TEntity>().Find(keyValues);
}
我有一个现有数据库,我在该数据库上使用代码优先 EF。现在数据库有一个 table 和一个复合键。我在代码中定义这个table如下
public class AssessmentResultType
{
[Key]
[Column(Order=1)]
public int AssessmentID {get; set;}
public int ResultType {get; set;}
[Key]
[Column(Order=2)]
public int ResultTypeID {get; set;}
.....
}
我的存储库是
public class AssessmentResultTypeRespository : Repository<AssessmentResultType>
{
public AssessmentResultTypeRespository(string connString)
:base(connString)
{ }
}
Repository.cs
public class Repository<TEntity> : IRepository<TEntity> where TEntity:class
{
protected readonly GradeXpertContext context;
public Repository(string connString) {
context = new ge(connString);
}
public TEntity Get(int id)
{
return context.Set<TEntity>().Find(id);
}
public IEnumerable<TEntity> GetAll() {
return context.Set<TEntity>().ToList();
}
public void Add(TEntity entity) {
context.Set<TEntity>().Add(entity);
}
public void AddRange(IEnumerable<TEntity> entities) {
context.Set<TEntity>().AddRange(entities);
}
public void Remove(TEntity entity) {
context.Set<TEntity>().Remove(entity);
}
public void RemoveRange(IEnumerable<TEntity> entities) {
context.Set<TEntity>().RemoveRange(entities);
}
}
如何adjust/override 上面的代码只在 AssessmentResultType
的情况下接受复合键?这样我就可以写
var art1 = repAssResultType.Get(32, 4);
只需改变一种方法:
public TEntity Get(params object[] keyValues)
{
return context.Set<TEntity>().Find(keyValues);
}