0

我有以下 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,以便当我ClassA从数据库上下文加载 a 时,ClassA.AssociatedDPVs将填充类似于以下内容:

DPVs.Where(d => d.ClassName == "ClassA" && d.ObjectID == this.ID)
    .ToDictionary(d => d.Name, d => d.Value)
4

1 回答 1

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,则必须覆盖SaveChangesDbContext告诉 EF 应该添加、修改或删除哪些 DPV(因此您必须拥有此信息,Name并且Value不会告诉您)。

于 2012-08-30T09:12:39.743 回答