我在使用 EF 5 Code First 时遇到了一些问题,主要是因为我不知道我必须寻找什么行为。
这是关于编写日历后端。
日历包括 CalendarEntries 列表 日历由用户拥有 CalendarEntry 有所有者(与日历相同)
问题是:当我将用户添加到日历条目时它可以工作,但是当我想将同一用户添加到另一个条目时,第一个日历条目会失去用户(CalendarEnty.Invitees)
另一方面,正确列出了用户的邀请数量,并且邀请表也具有正确的值。
有关如何解决此问题的任何提示?
public class Calendar
{
[Key]
public int CalendarId { get; set; }
[Required]
public virtual User Owner { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<CalendarEntry> CalendarEntries { get; set; }
}
public class CalendarEntry
{
public CalendarEntry()
{
Invitees = new List<User>();
}
public virtual ICollection<User> Invitees { get; set; }
public bool IsEmpty
{
get
{
if (Invitees.Count == 0)
{
return true;
}
return false;
}
}
[Key]
public int CalendarEntryId { get; set; }
[Required]
public DateTime StartDate { get; set; }
[Required]
public DateTime EndDate { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public double Duration
{
get
{
return EndDate.Subtract(StartDate).TotalMinutes;
}
}
public int OwnerId { get; set; }
public virtual User Owner { get; set; }
public int CalendarId { get; set; }
public virtual Calendar Calendar { get; set; }
public virtual Room Room { get; set; }
}
public class Invite
{
[Key]
public int InviteId { get; set; }
public virtual CalendarEntry CalendarEntry { get; set; }
public int Accepted { get; set; }
public virtual User Owner {get; set;}
}
public class User
{
[Key]
public int UserId { get; set; }
[Required]
public string GivenName { get; set; }
[Required]
public string Surname { get; set; }
[Required]
public string MailAddress { get; set; }
public string PhoneNumber { get; set; }
public virtual Calendar Calendar { get; set; }
public int? CalendarId { get; set; }
//SHA512Hashed
private string _password = null;
public string Password
{
get
{
return _password;
}
set
{
_password = value;
}
}
public virtual ICollection<Group> Groups { get; set; }
public virtual ICollection<Invite> Invites { get; set; }
}
用户和邀请的 ID 用于从 WCF 服务更轻松地访问项目这就是我不使用组合键的原因
通过以下方法,我确保只添加一次用户,我怀疑这会造成一些麻烦吗?不幸的是,我真的不知道如何解决它。
public int AddUser(User dbUser)
{
var users = this.GetAllUser();
if (users != null && users.Where(p => p.MailAddress == dbUser.MailAddress).Count() > 0)
{
return 0;
}
try
{
_calendarDatabase.User.Add(dbUser);
_calendarDatabase.SaveChanges();
return dbUser.UserId;
}
catch (Exception ex)
{
_logger.Error(ex.ToString());
}
return 0;
}