Представление таблицы соединений в Entity Framework - PullRequest
0 голосов
/ 24 мая 2018

Я создаю схему, в которой применяется следующая логика:

  • A String может принадлежать нескольким местоположениям.
  • Несколько Locations может иметь несколько String,или нет String.
  • DateTime (As DateScraped), при котором сформировались отношения между Location и String, должны быть записаны.

В основномЯ отобразил отношение как отношение многие ко многим , используя соединительную таблицу следующим образом:

sqldbm

Inотображая диаграмму в Code First EF6 (используя SQLite), у меня есть следующие объекты:

public class Location
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long LocationId { get; set; }

    [Required]
    public string Country { get; set; }

    [Required]
    public string CityOrProvince { get; set; }

    [Required]
    public string PlaceOrCity { get; set; }

    [Required]
    public string PostalCode { get; set; }
}

public class String
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long StringId { get; set; }

    [Required]
    public string SearchString { get; set; }
}

public class LocationStringMapping
{
    [Required]
    public string LocationId { get; set; }

    [Required]
    public string StringId { get; set; }

    [Required]
    public DateTime DateScraped { get; set; }
}

Я основал то, что я сделал, на предположениях, так как не могу найти какую-то конкретную информацию окак такие отношения должны быть построены.Обычно я использовал бы таблицу соединений, но это в ванильном SQL.Отличается ли реализация в EF?

Мне придется громоздко управлять таблицей LocationStringMapping вручную или есть какая-то неявная модель отношений, о которой я не знаю?

1 Ответ

0 голосов
/ 25 мая 2018
public class Location
{
    public long LocationId {get;set;}
    public virtual ICollection<LocationStringMapping> LocationStringMappings {get;set;}
    //other
}

public class String
{
    public long StringId {get;set;}
    public virtual ICollection<LocationStringMapping> LocationStringMappings {get;set;}
    //other
}

public class LocationStringMapping
{
    [Key, Column(Order = 0)]
    public long LocationId { get; set; }
    [Key, Column(Order = 1)]
    public long StringId { get; set; }

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

    public DateTime DateScraped {get;set;}
}
...