EF Code первая проблема.Создает новые объекты - PullRequest
0 голосов
/ 26 сентября 2018

Я новичок в Entity Framework Code First.Поэтому у меня проблемы с работой с миграциями.Так что это проблема:У меня есть следующие модели:

Defect - table of defects(general)
User - table of users
Order - table or orders
DefectEntry - defects per order(entered by a user).

DefectEntry имеет:

public virtual Defect defect { get; set; }
public virtual User user { get; set; }
public virtual Order order { get; set; }

Все остальные модели содержат:

public virtual ICollection<DefectEntry> Entries { get; set; }

Когда я пытаюсь добавить дефект вorder (порядок и пользователь известен) EF создает новый заказ и пользовательские объекты с совершенно другими идентификаторами (поскольку идентификатор уникален для каждого пользователя и рассматривается как Primary_key).

 private Order order;
 private User user;

public AddDefect(ref Order order, ref User user) //this is a name of UserControl
    {
        InitializeComponent();
        this.order = order;
        this.user = user;
        loadDefects();
    }

private void loadDefects()
    {
        using (MyBridgeContext context = new MyBridgeContext())
        {
            var defects = context.Defects;
            foreach (var obj in defects)
            {
                defectList.Items.Add(obj);
            }
        }
    }

private void addButton_Click(object sender, RoutedEventArgs e)
    {
        if (doubleCheck.IsChecked == true)
        {
            try
            {
                using (MyBridgeContext context = new MyBridgeContext())
                {
                    DefectEntry entry = new DefectEntry();

                    foreach (Defect def in defectList.Items)
                    {
                        if(defectList.SelectedItem == def)
                        {
                            entry.defect = def;
                        }
                    }

                    entry.user = user;
                    entry.order = order;
                    entry.dt = DateTime.Now;

                    context.Entries.Add(entry);
                    context.SaveChanges();


                    this.Content = new MainMonitoring(ref order, ref user);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
    }

Когда я нажимаю кнопку addButton, у меня естьЭти виды дубликатов: Внешний вид таблицы пользователя Внешний вид таблицы дефектов Внешний вид таблицы заказов Внешний вид таблицы дефектов

1 Ответ

0 голосов
/ 26 сентября 2018

Это происходит потому, что ваши пользовательские и заказные объекты отключены от контекста EF.Вы должны присоединить их к контексту, прежде чем использовать их в объекте DefectEntry.Таким образом, вы должны сделать что-то подобное сразу после using (MyBridgeContext context=new MyBridgeContext()) { инструкции внутри addButton_Click метода:

context.Users.Attach(user);
context.Orders.Attach(order);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...