0

是否可以基于特定列值进行外键映射。

我有以下实体。

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,或者我必须为每个列表创建三个不同的表。IE和. _TamperedDevicesIngoredDevicesControllerDevice DeviceStatusActiveControllerDeviceTamperedControllerDevicesIgnoredControllerDevices

如果您需要进一步解释,请告诉我。

4

3 回答 3

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,而不是具有状态的单个实体,与模型不对应。TamperedControllerDeviceIgnoredControllerDevice

设备不会更改状态,而是更改其类型,而您不能以简单的方式做到这一点。

于 2013-01-11T08:31:31.213 回答
0

是的,你可以这么做。在 Entity Framework 5、.Net Framework 4.5 中引入了枚举支持。在 Entity Framework 中,枚举可以具有以下基础类型:Byte、Int16、Int32、Int64 或 SByte。

你可以像这样过滤:

context.ControllerDevices.Where(d => d.Status == DeviceStatus.Active);

更多信息:http: //msdn.microsoft.com/en-us/data/hh859576.aspx

于 2013-01-11T08:38:51.097 回答
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; }
}

http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/d0443029-2175-4bde-a834-4f8dbf313201/

我应该使用实体框架 4.1 和 MVC3 启用或禁用动态代理吗?

于 2013-01-11T08:43:50.173 回答