Нужно ли явно добавлять свойство int к внешним ключам для составных объектов с использованием Entity Framework? - PullRequest
0 голосов
/ 14 октября 2019

Нужно ли добавлять целое число PropertyId, в примере UserId, для каждого объекта внешнего ключа, использующего Entity Framework? NHibernate обрабатывает это автоматически, мне интересно, есть ли способ решить это, используя только объект и не извлекая его из базы данных каждый раз, когда я добавляю новый регистр.

Я попытался вставить, просто определяя:

// It's complaining about required user fields
var newMenu = new Menu { Name = "test", User = new User { Id = 1 }};

public class User
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required]
    [MaxLength(100)]
    public string Name { get; set; }

    [Required]
    [MaxLength(100)]
    public string Email { get; set; }

    [Required]
    [MaxLength(30)]
    public string Password { get; set; }

    [Required]
    public bool Active { get; set; }
}

public class Menu
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }        

    [Required]
    [MaxLength(100)]
    public string Name { get; set; }

    [Required]
    public User User { get; set; }

    [Required]
    public bool Active { get; set; }
}

Ответы [ 2 ]

0 голосов
/ 14 октября 2019
//create or retrieve the user that has to be linked to menu from the database
User u = users.Where(user => user.Id == 1); // example

var newMenu1 = new Menu{ Name = "test", User = u };
var newMenu2 = new Menu{ Name = "test2", User = u };

Тогда вы можете сохранить изменения. Вы используете только пользовательский объект. Это то, что вам нужно?

0 голосов
/ 14 октября 2019

В EF необходимо явно определить внешний ключ, а также использовать атрибут ForeignKey, чтобы указать отношение

public class Menu
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }        

    [Required]
    [MaxLength(100)]
    public string Name { get; set; }

    [ForeignKey("User")]
    public int UserId { get; set;}

    [Required]
    public User User { get; set; }

    [Required]
    public bool Active { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...