Как мне объявить непосредственное отношение в коде сначала ef.1 - PullRequest
0 голосов
/ 09 октября 2011

У меня есть два класса

public class User
    {
        [Key]
        public int Id { get; set; }
        public Avatar Avatar { get; set; }

    }

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 int UserId { get; set; }
    }

User имеет один Avatar или ноль.

При добавлении 2 пользователей

db.Users.Add(new User() { Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2A") }});
db.Users.Add(new User() { Avatar = new Avatar() { Link = new Uri("http://myUrl/%2E%2E/%2E%2B") }});
db.SaveChanges();

каждый Avatar имеет 0 как UserId, и, конечно, у пользователей есть 1 и 2 как Id.

Как я могу это исправить?

1 Ответ

0 голосов
/ 09 октября 2011

Платформа сущностей не поддерживает отношения один-к-одному, если только это не является отображением общего первичного ключа. Так что в вашем случае вы не можете иметь навигационное свойство Avatar в классе User. Вместо этого вы можете иметь User свойство в Avatar классе.

public class User
{
        [Key]
        public int Id { get; set; }


}

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 int UserId { get; set; }

        public virtual User User { get; set; }
}

Затем вы можете добавить объекты следующим образом

var user = new User();
var avatar = = new Avatar() { User = user, Link = new Uri("http://myUrl/%2E%2E/%2E%2A") };
db.Users.Add(user);
db.SaveChanges();
...