【问题标题】:Last inserted id with EF 4.1 , MVC 3最后插入的 id 为 EF 4.1 , MVC 3
【发布时间】:2012-07-03 17:09:07
【问题描述】:

我在 Visual Studio 2010 中使用 asp.net mvc 3 和 EF 4.1,我是新手。

我对最后插入的 ID 有疑问。我的数据库中有两个表“points_Order”和“points_OrderDetails”。

                            db.Order.Add(po);
                            db.SaveChanges();
                           //second thing i have tried
                            var orderID = (from oi in db.Order
                                           select oi.ID)
                                           .Max(i => i);
                           // and this first thing
                            pod.OrderID = po.ID;
                            pod.OrderID = orderID;
                            db.OrderDetails.Add(pod);
                            db.SaveChanges();

上下文类:

public class points_Order {
    [Key]
    public int ID { get; set; }
    public string Owner { get; set; }
    public DateTime Date { get; set; }
    public byte Status { get; set; }
    public int Total { get; set; }
    //public virtual points_OrderDetails OrderDetail { get; set; }
}

public class points_OrderDetails {
    [Key]
    public int OrderID { get; set; }
    public string OrderType { get; set; }
    public int Amount { get; set; }
    public int ItemID { get; set; }
    public int ItemRecord { get; set; }
    public string ItemCode { get; set; }
    public byte Plus { get; set; }
    public byte Degree { get; set; } 
    public string Kind { get; set; }
    public string Sex { get; set; }
    public string Race { get; set; }
    public string Tier { get; set; }
    public string SetItem { get; set; }
    public string SOX { get; set; }
    //public Blues Blue { get; set; }
}

public DbSet<points_Order> Order { get; set; }
public DbSet<points_OrderDetails> OrderDetails { get; set; }

我收到错误“{”无法将值 NULL 插入列“OrderID”,表“db.dbo.points_OrderDetails”;列不允许空值。 INSERT 失败。\r\n语句已终止。"}"

我能做什么?我是不是做错了什么?

【问题讨论】:

    标签: c# asp.net-mvc-3 entity-framework-4.1


    【解决方案1】:

    如果您在模型中从 order -> order details 定义关系,它应该像这样工作:

    po.Details.Add(pod); // or pod.Order = po;
    db.Order.Add(po);
    db.SaveChanges();
    

    EF 应该为你弄清楚关系,无需手动设置 ID。

    更新:您正在尝试做一些不受支持的事情。你有一个一对一的映射; EF 不支持您想要的方式(共享主键)。有关如何在 EF 中进行一对一建模的说明,请参阅 http://weblogs.asp.net/manavi/archive/2011/05/01/associations-in-ef-4-1-code-first-part-5-one-to-one-foreign-key-associations.aspx

    【讨论】:

    • 我没有定义任何关系。等一下,我会更新问题。
    • 我为订单表尝试了public virtual points_OrderDetails OrderDetail { get; set; }。实体在订单表中寻找OrderDetail_OrderID。然后为 OrderDetails 表尝试了public virtual points_Orders Order { get; set; }。什么也没发生……
    • 您的模型不是我所期望的(我假设 order->orderdetails 是一对多)请查看我的更新答案
    猜你喜欢
    • 2012-10-17
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多