OneToMany добавляет новую запись? - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь создать отношение OneToMany между двумя классами «Пользователь и брокер», где у пользователя много брокеров.

Проблема в том, что когда я добавляю нового брокера, создается новый пользователь, и яне знаю, почему это происходит.

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

Пользователь

public class User{


    public long id                  { get; set; }

    public String name              { get; set; }

    public IList<Broker> brokers    { get; set; }

Брокер

public class Broker{

    public long id                          { get; set; }
    public String name                      { get; set; }   

    public User user                        { get; set; }

UserMap

public class UserMap : EntityTypeConfiguration<User>{
    public UserMap (){
        this.ToTable("Users");
        this.HasKey<long>(u => u.id);
        this.Property(u => u.id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        this.Property(u => u.name).IsRequired().HasMaxLength(50);

        HasMany(u => u.brokers).WithRequired(c => c.user);

BrokerMap

public class BrokerMap : EntityTypeConfiguration<Broker>{
    public BrokerMap (){
        this.ToTable("Brokers");
        this.HasKey<long>(c => c.id);
        this.Property(c => c.id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

        this.Property(c => c.name).IsRequired().HasMaxLength(50);       

        HasRequired(u => u.user).WithMany(c => c.brokers);

Сохранение данных

Broker broker = new Broker();
User user = Session["User"] as User;
broker.user = user;

context.Brokers.Add(broker);
context.SaveChanges();

Ответы [ 2 ]

1 голос
/ 11 марта 2019

user - это новая сущность, полностью отсоединенная от вашей dbcontext, поэтому она вставляется как новая сущность вместе с broker.
Однако, чтобы избежать этого, сначала вам нужно прочитать user из базы данных, а затем присвоить его broker, чтобы без вставки нового user установилась связь.

  User user = Session["User"] as User;
  var userFromDb = context.Users.FirstOrDefault(t = > t.Id == user.Id);
  broker.user = userFromDb ;
  context.Brokers.Add(broker);
  context.SaveChanges();
0 голосов
/ 11 марта 2019

Это ожидаемое поведение Entity Framework, средства, которое они вам предлагают.Другими словами, вам не нужно беспокоиться о создании пользователя, и после создания свяжите его с этим брокером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...