public class DbContextHelper<T> where T : DbContext, new() { private static T _instance; public static T Instance { get { return _instance ?? (_instance = new T()); } } public static void Add<TEntity>(TEntity entity) where TEntity : class { using(var context = _instance) { context.Set<TEntity>().Add(entity); context.SaveChanges(); } } public static void Update<TEntity>(TEntity entity) where TEntity : class { using(var context = _instance) { context.Entry(entity).State = EntityState.Modified; context.SaveChanges(); } } public static void Delete<TEntity>(TEntity entity) where TEntity: class { using(var context = _instance) { context.Set<TEntity>().Add(entity); context.SaveChanges(); } } public static List<TEntity> GetAll<TEntity>() where TEntity : class { using (var context = _instance) { return context.Set<TEntity>().ToList(); } } public static TEntity GetById<TEntity>(object id) where TEntity : class { using (var context = _instance) { return context.Set<TEntity>().Find(id); } }如何通过导航属性获取信息
时间: 2024-01-12 17:03:15 浏览: 34
可以在`DbContextHelper`类中添加一个方法,通过导航属性获取相关信息。示例代码如下:
``` csharp
public static List<TEntity> GetAllWithNavigationProperty<TEntity>(Expression<Func<TEntity, object>> navigationPropertyPath) where TEntity : class
{
using (var context = _instance)
{
return context.Set<TEntity>().Include(navigationPropertyPath).ToList();
}
}
```
在上述代码中,`Include`方法可以通过导航属性路径指定要加载的相关实体类,从而获取相关信息。例如,如果想同时获取所有客户及其对应的订单信息,可以这样调用:
``` csharp
var customers = DbContextHelper<Customer>.GetAllWithNavigationProperty(c => c.Orders);
```
这样就可以获取所有客户及其对应的订单信息。如果需要获取特定客户及其对应的订单信息,可以使用`Where`方法来过滤数据,例如:
``` csharp
var customer = DbContextHelper<Customer>.GetAllWithNavigationProperty(c => c.Orders).FirstOrDefault(c => c.Id == 1);
```
这样就可以获取`Id`为1的客户及其对应的订单信息。