以下 2 个方法是通用存储库模式实现的一部分。
GetById 有效并返回 Id == id 的行。
GetByIdIncludingEntities 有问题。它需要与 GetById 类似地工作,并具有包括(加载)在“实体”数组中指定的相关实体行的附加功能。目前它可以工作,但它返回多行结果中的第一行。它只需要返回具有 Id == id 的行。请注意,所有实体都有一个名为“Id”的主键,它是一个整数(参见下面的实体模型)。
public virtual TEntity GetByIdIncludingEntities(int id, string[] entities)
{
// id: The primary key value to find.
// entities: Array of related entities to eagerly load. i.e., “BigThings”
var query = from q in context.Set<TEntity>() select q;
foreach (string entity in entities)
{
query = query.Include(entity);
}
return query.SingleOrDefault();
}
public virtual TEntity GetById(int id)
{
return context.Set<TEntity>().Find(id);
}
Here is a sample entity for reference.
[Table("Things")]
public class Thing
{
public Thing()
{
this.BigThings = new HashSet<BigThing>();
this.SmallThings = new HashSet<SmallThing>();
}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
[IgnoreDataMember]
public virtual ICollection<BigThing> BigThings { get; set; }
[IgnoreDataMember]
public virtual ICollection<SmallThing> SmallThings { get; set; }
}