我正在尝试创建一个数据库,其中一个表具有一对一关系和多对多关系......创建的数据库似乎仅作为一对一关系工作。这是我的模型:
public class Trip
{
public int ID { get; set; }
public virtual ICollection<Place> PassingBy { get; set; }
public Place Origin { get; set; }
public Place Destination { get; set; }
public DateTime Time { get; set; }
public int EmptySlots { get; set; }
public virtual ICollection<Person> Attendants { get; set; }
public string AccessKey { get; set; }
}
public class Person
{
public int ID { get; set; }
public string Username { get; set; }
public virtual ICollection<Trip> Trips { get; set; }
}
public class Place
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<Trip> Trips { get; set; }
}
public class GARDB : DbContext
{
public DbSet<Trip> Trips { get; set; }
public DbSet<Person> Persons { get; set; }
public DbSet<Place> Places { get; set; }
}
现在,当我进行添加迁移和更新数据库时。该数据库有一个名为“PersonTrip”的表,它是多对多关系所必需的。但是“PlaceTrip”没有表格。经过一些试验和错误。我发现这是因为这些行:
public Place Origin { get; set; }
public Place Destination { get; set; }
它们导致关系是一对多的。不是我想成为的多对多。有没有办法让 Place-Trip 关系像 Person-Trip 一样,但不删除那两条线。
谢谢!
编辑:解决方案
我没有说清楚我想要什么。我想画线
public virtual ICollection<Place> PassingBy { get; set; }
映射到线
public virtual ICollection<Trip> Trips { get; set; }
在 Place 类中。我从答案中得到的解决方案是:
代替 :
public virtual ICollection<Place> PassingBy { get; set; }
和:
[InverseProperty("Trips")]
public virtual ICollection<Place> PassingBy { get; set; }
并替换:
public virtual ICollection<Trip> Trips { get; set; }
在 Place 类中:
[InverseProperty("PassingBy")]
public virtual ICollection<Trip> Trips { get; set; }
并在顶部添加此包含:
using System.ComponentModel.DataAnnotations.Schema;