所以这是我的物体:
public class Stock {
    public Guid ID { get; set; }
    public decimal Qty { get; set; }
    .....
}
我对此有很多继承Stock:
public class StockA : Stock {
    public string Spec { get; set; }
    ....
}
public class StockB : Stock {
    public string Color { get; set; }
    ....
}
public class StockC : Stock {
    public string Variant { get; set; }
    ....
}
public class StockD : Stock {
    public string Type { get; set; }
    ....
}
.....
假设有 10 多个继承。如何获取所有列Stock及其继承?
例如我需要这些列:
ID
Qty
Spec
Color
Variant
Type
....
我试图定义一个组合物体:
public class AllStock {
    public Guid ID { get; set; }
    public decimal Qty { get; set; }
    public string Spec { get; set; }
    public string Color { get; set; }
    public string Variant { get; set; } 
    public string Type { get; set; }
    .....
}
我将它设定在我的DBContext:
public DbSet<AllStock> AllStocks { get; set; }
但是当我查询它时:
var x = await db.AllStocks.ToList();
它回传空串列。我想这个AllStock物体与另一个物体是分开的。
我该怎么做?
uj5u.com热心网友回复:
尝试以下操作Select:
var result = await db.Stocks
    .Select(x => new 
    {
        x.ID,
        x.Qty,
        Spec    = x is StockA ? ((StockA)x).Spec    : null,
        Color   = x is StockB ? ((StockB)x).Color   : null,
        Variant = x is StockC ? ((StockC)x).Variant : null,
        Type    = x is StockD ? ((StockD)x).Type    : null
    })
    .ToListAsync();
uj5u.com热心网友回复:
我能够做到这一点FromSqlRaw。
首先分配DbSet:
public DbSet<StockVM> AllStocks { get; set; }
然后将模型构建器设定为HasNoKey:
mb.Entity<StockVM>().HasNoKey();
那么这是查询:
return db.AllStocks.FromSqlRaw(@"
    SELECT"  
    GetSelect()  
    @" FROM Stocks
        INNER JOIN Colors ON Stocks.ColorId = Colors.ID
        INNER JOIN Units ON Stocks.UnitId = Units.ID
        INNER JOIN Items ON Stocks.ItemId = Items.ID
        INNER JOIN ItemTypes ON Stocks.ItemTypeId = ItemTypes.ID
    ");
我还必须创建一个具有所有属性的物体:
public class StockVM{
    public Guid ID { get; set; }
    public decimal Qty { get; set; }
    public string Spec { get; set; }
    public string Color { get; set; }
    public string Variant { get; set; } 
    public string Type { get; set; }
    .....
}
重要的
小心迁移,确保AllStock从Up(). 或者它将尝试创建一个新列。

 
							 
										
										 
										
										 
										
										
										 
										
										 
										
										 
										
										
0 评论