我要上课,VisitModel和VisitorModel,visitModel可以有很多VisitorModel,反之亦然。在将这两种关系添加到modelBuilder之后,它仍然没有保存到第三个自动生成的表中。它创建了表,但当我尝试保存时,它不会同时保存两个Ids。这是我的代码:
public class VisitorModel
{
public int VisitorModelId { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
public bool IsDeleted { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public string PhotoUrl { get; set; }
public string Address { get; set; }
public int BranchId { get; set; }
public int UserId { get; set; }
public virtual User User { get; set; }
public virtual ICollection<VisitModel> VisitModels { get; set; }
}下面是VisitModel类:
public class VisitModel
{
public VisitModel()
{
VisitorModels = new List<VisitorModel>();
}
public int VisitModelId { get; set; }
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
public bool IsDeleted { get; set; }
public string UserToVisit { get; set; }
public virtual User User { get; set; }
public string HostEmail { get; set; }
public int UserId { get; set; }
public int VisitorTypeId { get; set; }
public int PurposeOfVisitId { get; set; }
public string OtherPurposeOfVisit { get; set; }
public DateTime ArrivalDate { get; set; }
public DateTime ArrivalTime { get; set; }
public DateTime DepartureTime { get; set; }
public DateTime DepartureDate { get; set; }
public bool IsCheckedIn { get; set; }
public bool IsCheckedOut { get; set; }
public string BookedBy { get; set; }
public bool IamHost { get; set; }
public virtual ICollection<VisitorModel> VisitorModels { get; set; }
}这是modelBuilder:
modelBuilder.Entity<VisitModel>()
.HasMany(up => up.VisitorModels)
.WithMany(course => course.VisitModels)
.Map(mc =>
{
mc.ToTable("VisitVisitorModel");
mc.MapLeftKey("VisitModelId");
mc.MapRightKey("VisitorModelId");
});当我尝试保存时,它不会将两个it都保存到VisitVisitorModel表中。桌子总是空的。拜托,我做错什么了?
发布于 2017-11-17 13:32:19
因为您遵循了实体框架-多到多公约,所以您不需要使用fluent API部件来设计连接表。
实体框架通过查看类定义就知道,您设计了许多到多个关系。实体框架将为您设计一个合适的连接表。您甚至不应该在您的dbContext中提到这个连接表:
class MyDbContext : DbContext
{
public DbSet<VisitModel> VisitModels {get; set;}
public DbSet<VistitorModel> VistiroModels {get; set}
}但是如果我的连接表没有DbSet,我如何在VisitModel和VisitorModel上进行连接?
答案是:不要使用联接,使用ICollections;
告诉我所有没有被删除的VisitorModels的名字和地址,以及他们今天入住的VisitModels的所有到达时间和起飞时间。
通常,您将加入VisitorModel,在VisitModelId上使用连接表VisitVisitorModel,在VisitorModelId上再次加入VisitModel。
但是您也可以使用ICollectioins:
var result = myDbContext.VisitorModels
.Where(visitorModel => !visitorModel.IsDeleted)
.Select(visitorModel => new
{
// select only the properties of visitorModel you will be using:
FullName = visitorModel.FullName,
Address = visitorModel.Address,
Phone = visitorModel.Phone,
... // other properties
// get ArrivalTime and DepartureTime of all VisitModels that are checked in
VisitModels = visitorModel.VisitModels
.Where(visitModel => visitModel.IsCheckedInd)
.Select(visitModel => new
{ // again: select only the properties you will be using:
ArrivalTime = visitModel.ArrivalTime,
DepartureTime = visitModel.DepartureTime,
... // other properties
})
.ToList(),
}
}由于适当的多到多配置,您将不需要连接表,也不需要使用主键和外键进行连接。实体框架将知道要进行哪些连接。
https://stackoverflow.com/questions/47343201
复制相似问题