我有一個數據庫,其中包含各種對象的映射值表。使用實體框架插入時C#動態轉換
例如,Colour
表包含BLK > Black, BLU > BLUE, ORA > ORANGE
等和CarType
表包含4DH > Four-door hatchback, 4WD > Four wheel drive
等等
我使用實體框架代碼優先,所以我有一個背景下建立這樣的事情。
public class MappingContext : DbContext
{
public MappingContext()
: base("Mappings")
{
}
public DbSet<Colour> ColourMappings { get; set; }
public DbSet<CarType> CarTypeMappings { get; set; }
}
,涉及到每個表在我Mapping
數據庫中的每個對象從基類繼承,像這樣:
public class Mapping
{
public int Id { get; set; }
public string OrignalValue { get; set; }
public string MappedValue { get; set; }
}
public class CarType : Mapping{}
public class Colour : Mapping{}
現在我想做的是從充滿XML文件中讀取這些映射包含映射並將它們插入到數據庫中的「模板」。
我有以下的方法來做到這一點:
public void InsertMappings(XDocument xml, string templateName, Type typeToInsert)
{
// Here I find the relevent mappings
using (var repo = new Repository())
{
var mapppings = mappings.Select(mapping => new Mapping
{
MappedValue = mapping.Value,
OrignalValue = GetCode(mapping)
});
foreach (var mapping in mapppings.ToList())
{
var map = (typeToInsert)mapping // << This line will not compile
repo.Insert(map);
}
repo.Save();
}
}
這不會complie因爲它不承認試圖投「(typeToInsert)映射」。
因此,基本上我需要知道的是,如何將此映射對象轉換爲特定的映射對象,並將其插入到數據庫中?或者有更好的方法提供任何建議!
看看這個問題:http://stackoverflow.com/questions/4925718/c-dynamic-runtime-cast – SWeko
我假設你動態解析'typeToInsert'在一些點,並將類型標識符傳遞給'InsertMappings' - 即不能只使用通用的'InsertMappings'方法? (愚蠢的問題真的...只是檢查) –
Charleh