实体框架中非数据库支持的相关对象

本文关键字:对象 支持 数据库 框架 实体 | 更新日期: 2023-09-27 18:16:40

我正在使用实体框架5(代码第一方法),并希望有一个我的实体存储在我的数据库中(并暴露在我的DbContextDbSet<>属性)有一个不存储在数据库中的相关对象。

下面是我想要实现的一个例子:

// Stored in DB
public class RecordedMeasure
{
    [Required]
    public int RecordedMeasureID { get; set; }
    [Required]
    [StringLength(150)]
    public string MeasureName { get; set; }
    // Navigation Property...
    // Go find the Measure by the MeasureName (which IS persisted to the DB)
    public Measure Measure { get; set;}
    // Additional properties removed for brevity....
}
// NOT Stored in DB
public class Measure{
    public string MeasureName { get; set;}
   
    // Additional properties removed for brevity....
}
// Allows registration and holds a static collection of all "Measures"
// that are known at runtime
public class MeasureRegistration{
    // Allow access to all measures stored
    public static List<Measure> Measures { get; set; }
    // Register a measure
    public static void Register(Measure measure) { 
        // Code removed for brevity...
    }
}

是否有一种方法可以暴露我的MeasureRegistration.Measures集合作为实体框架可以工作的东西,就像它会一个典型的DbSet?

谢谢!

更新/进一步澄清

我知道如何防止属性被映射到数据库,但是,我不知道如何让EF实际上有一个"存储库";或者非数据库支持模型的集合(如DbSet<>),它可以用来实现数据库支持模型和非数据库支持模型之间的关系。

实体框架中非数据库支持的相关对象

难道你不能在上下文中添加一个新属性,为你提供一个IEnumerable,并在getter中添加逻辑来检索它吗?

In your Context:

public IEnumerable<Measure> Measures { get { return MeasureRegistration.Measures; } }

在你的实体中:

[NotMapped]
public Measure Measure 
{ 
    get { return MeasureRegistration.Measures
                .FirstOrDefault(m => m.MeasureName == this.MeasureName; }
    set { this.MeasureName == value.MeasureName;}
}

从这个问题中,我猜你想让EF帮你把这个联系起来,如果是这样的话,我想你就不走运了。我不确定这样做有什么好处,除非你有一堆实体引用Measure.

使用[NotMapped]注释,您可以实现这一点。

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.schema.notmappedattribute.aspx

"表示一个属性或类应该从数据库映射中排除。"