实体框架中非数据库支持的相关对象
本文关键字:对象 支持 数据库 框架 实体 | 更新日期: 2023-09-27 18:16:40
我正在使用实体框架5(代码第一方法),并希望有一个我的实体存储在我的数据库中(并暴露在我的DbContext
与DbSet<>
属性)有一个不存储在数据库中的相关对象。
下面是我想要实现的一个例子:
// 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]
注释,您可以实现这一点。
"表示一个属性或类应该从数据库映射中排除。"