EF Core - 仅在不存在时保存部分

时间:2017-01-30 12:41:16

标签: c# .net entity-framework

我有一个模型,其中有一些由一些外键控制的引用。我将实体作为JSON有效负载接收:

{
  "Person": {
      "Name": "John",
      "Age": 24,
      "Email": "john@contoso.com"
  },
  "RandomText": "This is my text"
}

让我们想象这会映射到一个看起来像这样的模型:

class Message {
    public Guid PersonId { get; set; }
    public Person Person { get; set; } // contains guid / name / age / email
    public string Text { get; set; }
}

使用等效的两个表,一个用于person,一个用于Message,其中包含对person的引用。这两个显然是1(人)到很多(消息)

这说明了我的设置。

为了自动同步这个我想对我收到的数据进行一些验证/检查,例如:如果该人存在,则附上那些人Guid,如果该人不存在,则生成一个Guid,保存该人,然后保存文本。

我的模型稍微复杂一些,但遵循相同的模式:

class Meeting {
public Guid LocationId { get; set; }
public Location Location { get; set; }
public string Subject { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public DateTime? BookedAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public bool WasCancelled { get; set; }
public bool WasNoShow { get; set; }
public bool WasAdhoc { get; set; }
public virtual ICollection<Extended> Extended { get; set; }
public bool WasEnded { get; set; }
public DateTime? EndedAt { get; set; }
public virtual ICollection<Attendee> Attendees { get; set; }
public virtual ICollection<MeetingPurpose> Purpose { get; set; }
public virtual ICollection<MeetingRoomMeeting> MeetingRooms { get; set; }
public Guid? DeliveryId { get; set; }
public virtual Delivery Delivery { get; set; }  
}

MeetingRoomMeetingMeetingPurpose是连接表,它们只映射多对多的关系:

public Guid MeetingRoomId { get; set; }
public virtual MeetingRoom MeetingRoom { get; set; }

public Guid MeetingId { get; set; }
public virtual Meeting Meeting { get; set; }

同样重要的是,我有一些可能已经保存过的数据 - 我需要确保是否是这种情况,而不是再次保存。是否有任何模式,或者最简单的方法是使用原始查询,或者从组件类中拆分“Meeting”类并单独验证/保存它们?

0 个答案:

没有答案