所以這是我的物體:
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(). 或者它將嘗試創建一個新列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/410458.html
標籤:
