Как создать объект POCO, который имеет 2 ссылки на другой класс - PullRequest
1 голос
/ 06 мая 2011

У меня есть таблица (событие), которая может иметь 2 местоположения (основное, альтернативное). Локации могут использоваться в других таблицах (поэтому EventId в locationTable отсутствует). С помощью самоконтроля POCO, как создать ссылку из таблицы событий на таблицу 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 каждой таблицы и флагом, указывающим, является ли это основным или альтернативным местоположением, но я не уверен, как это будет выглядеть в настройке класса 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 Ответ

1 голос
/ 06 мая 2011

Самый простой способ - просто использовать:

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).

...