我需要发布一个连接表Entity Framework生成(CustomerEmployeeJobs)。每个工作都可以有多个客户员工。每个Job必须有CustomerEmployee PM,CustomerEmployee Account,CustomerEmployee Admin和CustomerEmployee Superintendent。现在,这些是使用CustomerEmployeeRole属性定义的。当我创建一个新的工作时,我选择了显示具有适当标题的客户员工的方框。那我怎么做这个POST?我认为这种关系会是多对多的。 Junction表有一个JobId和CustomerEmployeeId列。所以看起来这是正确的。我可以手动添加具有多个CustomerEmployeeId的相同JobId。但是我如何通过实际应用程序做到这一点?这是New Job Modal的样子。如果我改变了存储CustomerEmployee标题的方式会更好吗?而不是“字符串”CustomerEmployeeRole它可能是布尔,“bool”CustomerEmployeeIsPM,CustomerEmployeeIsAdmin等.... plunker
public class Job
{
//job
public int JobId { get; set; }
public int? JobNumber { get; set; }
public string JobName { get; set; }
public virtual ICollection<CustomerEmployee> CustomerEmployees { get; set; }
}
public class CustomerEmployee
{
[Key]
public int CustomerEmployeeId { get; set; }
public string CustomerEmployeeFirstName { get; set; }
public string CustomerEmployeeLastName { get; set; }
public string CustomerEmployeeRole { get; set; }
public virtual ICollection<Job> Jobs { get; set; }
}
// POST api/<controller>
public async Task<IHttpActionResult> PostnewJob([FromBody]JobViewModel newJob)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
using (var context = new ApplicationDbContext())
{
var job = new Job();
Mapper.CreateMap<JobViewModel, Job>();
Mapper.Map(newJob, job);
context.Jobs.Add(job);
await context.SaveChangesAsync();
return CreatedAtRoute("JobApi", new { job.JobId }, job);
}
}
答案 0 :(得分:2)
我认为你的模型不正确。你说的是:
因此,您在CustomerEmployee表和Job表之间不需要联结表。您的Job表应该只有2个CustomerEmployee表的外键
我想你的模型看起来像这样:
public class Job
{
//job
public int JobId { get; set; }
public int? JobNumber { get; set; }
public string JobName { get; set; }
[ForeignKey("CustomerPMId")]
public CustomerEmployee CustomerPM { get; set; }
[ForeignKey("CustomerSuperintendentId")]
public CustomerEmployee CustomerSuperintendent { get; set; }
}
虽然它不是你的问题的一部分,因此也是offtopic,但我想提一下:在你使用它的方向上非常小心自动化器!其他方面是完美的,但从你的DTO到ef模型,IMO不要这样做!您的MVC模型很可能会根据您视图中的不同需求而改变,然后您需要配置automapper来纠正哪个可能不值得麻烦,如果您保持您的实体好看又小,就像您拥有的那样。