我有一个表(事件),可以有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;}
}
感谢您提出任何建议/提示/解决方案/建设性批评!
答案 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
添加更多地点)。