我正在使用Entity Framework 5(代码优先方法),并希望将我的一个实体存储在我的数据库中(并在我的DbContext
中显示DbSet<>
属性)有一个未存储在DB中的相关对象。
下面是我想要实现的一个例子:
// 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<>
)的非数据库 - BACKED模型,它可用于实现数据库支持的模型和非数据库支持的模型之间的关系。
答案 0 :(得分: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,否则我不确定自己连接它会有什么好处。
答案 1 :(得分:2)
使用[NotMapped]
注释,您可以实现此目的。
“表示应从数据库映射中排除属性或类。”