是否可以根据特定的列值进行外键映射。
我有以下实体。
public class Controller
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual List<ControllerDevice> ActiveDevices { get; set; }
public virtual List<ControllerDevice> TamperedDevices { get; set; }
public virtual List<ControllerDevice> IgnoredDevices { get; set; }
}
public class ControllerDevice
{
public int Id { get; set; }
public DeviceStatus Status { get; set; }
public int ControllerId { get; set; }
public int NetworkDeviceId { get; set; }
public virtual Controller Controller { get; set; }
public virtual NetowkDevice NetowkDevice { get; set; }
}
public class NetowkDevice
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
public enum DeviceStatus
{
Active,
Tampered,
Ignored
}
是否可以根据ActiveDevices
TamperedDevices
自动填充IngoredDevices
,ControllerDevice
和DeviceStatus
列表,或者我是否必须创建三个每个列表的不同表。 IE ActiveControllerDevice
,TamperedControllerDevices
和IgnoredControllerDevices
。
如果您需要进一步说明,请与我们联系。
答案 0 :(得分:0)
使用单个设备集合:
public class Controller
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual List<ControllerDevice> Devices { get; set; }
}
...并在需要处理或显示具有特定Status
值的设备时对其进行过滤:
controller.Devices.Where(d => d.Status == DeviceStatus.Active);
每个设备状态和/或设备层次结构的几个表(理论上,您可以使用TPH继承来解决此问题)是一种地狱的方式,因为而不是具有状态的单个实体ControllerDevice
获得三种实体类型(ActiveControllerDevice
,TamperedControllerDevice
和IgnoredControllerDevice
),这与模型不对应。
设备不会更改状态,而是更改其类型,而您无法以简单的方式执行此操作。
答案 1 :(得分:0)
是的,你可以这样做。 Enum支持在实体框架5,.Net Framework 4.5中引入。在Entity Framework中,枚举可以具有以下基础类型:Byte,Int16,Int32,Int64或SByte。
你可以像这样过滤:
context.ControllerDevices.Where(d => d.Status == DeviceStatus.Active);
答案 2 :(得分:0)
public class TestContext : DbContext
{
public TestContext()
{
Configuration.AutoDetectChangesEnabled = true;
Configuration.LazyLoadingEnabled = true;
Configuration.ProxyCreationEnabled = true;
Configuration.ValidateOnSaveEnabled = true;
}
public virtual DbSet<NetowkDevice> NetowkDevices{ get; set; }
public virtual DbSet<ControllerDevice> ControllerDevices{ get; set; }
public virtual DbSet<Controller> Controlleres{ get; set; }
}
Should I enable or disable dynamic proxies with entity framework 4.1 and MVC3?