我正在创建一个适用以下逻辑的模式:
String
可以属于多个位置。Locations
可以有多个String
,或者没有
String
。DateTime
和DateScraped
之间关系的Location
(作为String
)。基本上,我已经使用像这样的联结表将关系映射为多对多关系:
在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; }
}
我基于猜想到目前为止所做的事情,因为我似乎无法找到关于如何建立这样的关系的具体信息。通常我会使用联结表,但这是在vanilla SQL中。 EF中的实现是否有所不同?
我是否需要手动管理LocationStringMapping
表,或者是否存在某种我不知道的隐式关系模型?
答案 0 :(得分:2)
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;}
}