如何创建一个POCO对象,该对象具有2个对另一个类的引用

时间:2011-05-05 22:23:30

标签: asp.net-mvc-3 mapping poco entity-framework-4.1

我有一个表(事件),可以有2个位置(主要,备用)。位置可以在其他表中使用(所以locationTable中没有EventId)使用POCO自我跟踪,如何创建从Event表到Locations表的引用,或者处理这种情况的最佳方法是什么(我是大脑全脑冻结了吗? (正在使用.NET 4.0 C#,EF4.1,MVC 3。)

简化课程:

public class Event
{
   public int EventId {get; set;}
   public string Tile {get; set;}
   public int MainLocationId {get; set;}
   public int AltLocationId {get; set;}

   public virtual ICollection<Location> EventLocations {get; set;}
}

public class Location
{
   public int LocationId {get; set;}
   public string Name {get; set;}
}

我在考虑一个链接表(EventLocations)和每个表的PK以及一个标志,指示它是主要位置还是alt位置,但我不确定这在POCO类设置中会是什么样子。也许这一点,但它需要额外的业务逻辑(我最终希望能够将这个解决方案之王纳入T4,所以我不必在未来的项目中添加业务逻辑):

public class Event
{
   public int EventId {get; set;}
   public string Tile {get; set;}

   public virtual ICollection<EventLocation> EventLocations {get; set;}
}

public class Location
{
   public int LocationId {get; set;}
   public string Name {get; set;}

   public virtual ICollection<EventLocation> EventLocations {get; set;}
}

public class EventLocation
{
   public int EventId {get;set;}
   public int LocationId {get;set;}
   public bool IsMain {get; set;}

   public virtual Event Event {get;set;}
   public virtual Location Location {get;set;}
}

感谢您提出任何建议/提示/解决方案/建设性批评!

1 个答案:

答案 0 :(得分:1)

最简单的方法就是使用:

public class Event
{
   public int EventId {get; set;}
   public string Tile {get; set;}
   public int MainLocationId {get; set;}
   public int AltLocationId {get; set;}

   public virtual Location MainLocation {get; set;}
   public virtual Location AlternativeLocation {get; set;}

   // You can also add Foreign key properties for locations to simplify some usage scenarios
}

public class Location
{
   public int LocationId {get; set;}
   public string Name {get; set;}
}

您为活动定义了确切数量的地点,因此可能不需要使用多对多关系(可能会意外地向Event添加更多地点)。