实体框架核心:在没有现有外部实体的情况下保持一对多

时间:2019-01-04 16:01:13

标签: c# entity-framework-core

最近从其他语言迁移到C#/。Net Core,我陷入了EF Core的问题,我无法从文档中找出问题,希望您能为您提供帮助。在某种程度上,这与我之前的问题.Net Core [FromBody] JArray to ICollection

相关但不相同

我的数据库包含在Syncfusion计划中呈现的许多约会。可以邀请与会者参加这些约会。为方便起见,在编辑器中显示了一个用户列表,并通过任何插入或更新操作来传输guid的JSON数组。

用户实体本身在应用程序范围内不可用,因此我只希望对每个约会仅保留其Guid。我已经预见到这种结构:

约会(开始,结束,...,“ ICollection参加者”) 与会者将仅由AppointmentsId和Guid组成- 由于任何一个Guid只能参加一次约会,因此由这两个属性组成的组合键似乎很有用。

任何约会都可以没有一个,一个或多个关联的向导。

在代码中,我有这个(缩写):

public class Appointment
{
    public int Id { get; set; }
    public DateTime StartTime { get; set; }
    public ICollection<Attendee> AttendeeList { get; set; } 
    [NotMapped]
    public List<Guid> PostedAttendeeList { get; set; } // Contains a list of Guids after an Insert/Update POST action from [FromBody]
}

与会者将仅由约会ID和用户的Guid组成。

public class Attendee
{
    public Guid Id { get; set; }         
    public int AppointmentId { get; set; }
}

与会者的配置是这样的:

public class AttendeeConfiguration : IEntityTypeConfiguration<Attendee>
{
    public void Configure(EntityTypeBuilder<Attendee> builder)
    {
        builder.HasKey(x => new { x.Id, x.AppointmentId });
    }
}

从日程表接收到POST后,“ PostedAttendeeList”可能为空或包含一个或多个Guid。 如果是现有约会,则“ AttendeeList”可能为空或包含一个或多个Guid。 我想知道几件事: a)是否有更好的方法来保留此类数据?我曾尝试了解拥有的实体类型,但是看不到是否对我有帮助。 b)如果确实是解决此问题的一种好方法,我如何确保处理后的“ AttendeeList”与“ PostedAttendeeList”相同,以便添加所有新条目,并通过EF删除“ PostedAttendeeList”中不存在的条目核心?

我对维护“ AppointmentId”是谁的责任感到特别困惑-我想保持该属性可见,但我知道EF在基本属性中操作时会填充它吗?就是在“ Appointment”类中,“ AttendeeList.Add(new Attendee(){Id =“ 1234-abcd -...”}}”会在保存时自动填写AppointmentId吗?

如果您读到这里并感到困惑,请花点时间记住开始编程的时间-我非常困惑,无法提出一个更好的问题。即使您不能提供答案,也许您也可以帮助我改善问题。非常感谢大家!任何带有建议的评论都会对我的问题进行更新,以改进它。

0 个答案:

没有答案