我有以下DB Schema和POCO类。
Table ClassA
[ID] int NOT NULL
Table DPV
[ClassName] nvarchar(max) NOT NULL
[ObjectID] int NOT NULL
[Name] nvarchar(max) NOT NULL
[Value] nvarchar(max) NULL
public class ClassA
{
public int ID { get; set; }
public Dictionary<string, string> AssociatedDPVs { get; set; }
}
是否可以将上述架构映射到POCO,以便在从DB上下文加载ClassA
时,ClassA.AssociatedDPVs
将填充类似于此:
DPVs.Where(d => d.ClassName == "ClassA" && d.ObjectID == this.ID)
.ToDictionary(d => d.Name, d => d.Value)
答案 0 :(得分:2)
无法映射它。 EF只能映射数据库关系,但您可以通过解决方法实现它(未经测试 - 只是一个想法)。
伪代码:
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
objectContext.ObjectMaterialized += (sender, e) => {
var context = sender as ObjectContext;
var entity = e.Entity as ClassA;
if (entity != null) {
entity.AssociatedDPVs = context.CreateObjectSet<DPV>()
.Where(d => d.ClassName == "ClassA" && d.ObjectID == entity.ID)
.ToDictionary(d => d.Name, d => d.Value);
}
};
这有望解决检索DPV的问题。如果您还需要保留DPV,则必须覆盖SaveChanges
上的DbContext
并告知EF应添加,修改或删除哪些DPV(因此您必须拥有此信息并且只需Name
和Value
不会告诉你)。