public class DataBaseContext : DbContext { public DbSet<User> Users { get; set; } public DbSet<Cabin> Cabins { get; set; } public DbSet<Sensor> Sensors { get; set; } public DbSet<CommuServer> CommuServers { get; set; } public DbSet<ComServerPort> Ports { get; set; } public DbSet<CoreBoard> CoreBoards { get; set; } public DbSet<HullInfo> Hulls { get; set; } public DataBaseContext() : base("name=MyConnectionString") { } } /// <summary> /// 舱体 /// </summary> public class Cabin { /// <summary> /// 舱体ID /// </summary> [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } /// <summary> /// 舱体名称 /// </summary> [Key] public string Name { get; set; } /// <summary> /// 舱体内的通信设备 /// </summary> public virtual ICollection<CommuServer> CommuServers { get; set; } /// <summary> /// 核心板 /// </summary> public virtual CoreBoard CoreBoard { get; set; } }如何编写泛型函数通过Cabin获取CommuServers
时间: 2023-11-30 17:02:49 浏览: 27
可以编写一个泛型函数来实现通过Cabin获取CommuServers,示例代码如下:
```
public ICollection<T> GetNavigationPropertyByCabin<T>(DbContext dbContext, string cabinName, Func<Cabin, ICollection<T>> selector)
{
var cabin = dbContext.Cabins.Include(c => c.CommuServers).FirstOrDefault(c => c.Name == cabinName);
return selector(cabin);
}
```
其中,`dbContext`是`DataBaseContext`的实例,`cabinName`是需要查询的Cabin的名称,`selector`是一个委托,用于从Cabin中选择需要返回的导航属性。这里的泛型类型`T`可以是任意类型,可以是`CommuServer`,也可以是其他类型。在函数内部,先通过`Include`方法包含需要加载的导航属性,然后通过`selector`委托从Cabin中选择需要返回的导航属性。最后,返回值为泛型集合类型`ICollection<T>`。调用示例代码如下:
```
var commuServers = GetNavigationPropertyByCabin(dbContext, "cabinName", c => c.CommuServers);
```
其中,`dbContext`是`DataBaseContext`的实例,`"cabinName"`是需要查询的Cabin的名称,`c => c.CommuServers`是一个Lambda表达式,用于从Cabin中选择`CommuServers`导航属性。