【问题标题】:EF Code first problem. It creates the new objectsEF 代码第一个问题。它创建新对象
【发布时间】:2018-09-26 14:29:19
【问题描述】:

我是 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; }

当我尝试为每个订单(订单和用户已知)添加缺陷时,EF 正在创建一个新订单和具有完全另一个 ID 的用户对象(因为每个用户的 ID 都是唯一的,并且被视为 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 时,我有这些重复项: User table lookDefects table lookOrder table lookDefect Entry table look

【问题讨论】:

标签: c# entity-framework entity-framework-6 ef-code-first entity-framework-migrations


【解决方案1】:

这样做是因为您的用户和订单实体与 EF 上下文断开了连接。在 DefectEntry 对象中使用它们之前,您必须将它们重新附加到上下文中。所以你必须在addButton_Click 方法中的using (MyBridgeContext context=new MyBridgeContext()) { 语句之后做这样的事情:

context.Users.Attach(user);
context.Orders.Attach(order);

【讨论】:

  • 非常感谢它运行良好,但现在又出现了一个错误:
  • Context.Defects.Attach(defect) 不起作用。这里:
  • DefectEntry entry = new DefectEntry(); foreach (defectList.Items 中的缺陷定义) { if (defectList.SelectedItem == def) { context.Defects.Attach(def); entry.defect = def; } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多