1

我正在使用实体框架 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<>它可以用来实现的 NON DB-BACKED 模型的集合(如一个)数据库支持的模型和非数据库支持的模型之间的关系。

4

2 回答 2

3

您不能只向上下文添加一个新属性,该属性为您提供 IEnumerable 并将逻辑放入 getter 以检索它吗?

在您的上下文中:

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 的实体,否则我不确定自己接线会有什么优势。

于 2014-09-26T14:35:11.777 回答
2

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

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

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

于 2013-06-03T16:03:19.327 回答