Сначала у меня есть простой код в Entity Framework 4.1
коде:
PasmISOContext db = new PasmISOContext();
var user = new User();
user.CreationDate = DateTime.Now;
user.LastActivityDate = DateTime.Now;
user.LastLoginDate = DateTime.Now;
db.Users.Add(user);
db.SaveChanges();
user.Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2E") };
db.SaveChanges();
db.Users.Add(new User() { Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2E") } });
db.SaveChanges();
Проблема в том, что я получаю сообщение об ошибке
Произошла ошибка при сохранении сущностей, которые не раскрывают свойства внешнего ключа для своих отношений. Свойство EntityEntries вернет значение null, поскольку отдельная сущность не может быть идентифицирована как источник исключения. Обработку исключений при сохранении можно упростить, если раскрыть свойства внешнего ключа в типах сущностей. Подробнее см. InnerException.
at
db.Users.Add(new User() { Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2E") } });
db.SaveChanges();
Не понимаю, почему работает подобная операция. Что-то не так с моей моделью или с ef-code-first?
public class Avatar
{
[Key]
public int Id { get; set; }
[Required]
public string LinkInString { get; set; }
[NotMapped]
public Uri Link
{
get { return new Uri(LinkInString); }
set { LinkInString = value.AbsoluteUri; }
}
}
public class User
{
[Key]
public int Id { get; set; }
public string UserName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public Avatar Avatar { get; set; }
public virtual ICollection<Question> Questions { get; set; }
public virtual ICollection<Achievement> Achievements { get; set; }
public DateTime CreationDate { get; set; }
public DateTime LastLoginDate { get; set; }
public DateTime LastActivityDate { get; set; }
}
db.Users.Add(user)
кажется отсутствует, иначе 2SaveChanges
не имеют смысла.) Есть ли у вас какое-либо дополнительное сопоставление Fluent API? - person Slauma   schedule 29.10.2011Avatar_Id
вUser
таблице - это столбец внешнего ключа для свойства навигацииAvatar
, это нормально. Вы создавали таблицы базы данных вручную или позволили EF создать базу данных? На данный момент я не понимаю, почему вы получаете эту ошибку. Вы можете попробовать следовать совету, данному в исключении, и добавить свойство внешнего ключа в свойUser
класс:public int? AvatarId { get; set; }
и посмотреть, что произойдет. Возможно, по крайней мере, исключение раскроет более подробную информацию, в чем именно заключается проблема. - person Slauma   schedule 29.10.2011