0

在我之前,一位开发人员首先使用实体​​框架代码。我首先不擅长 EF 代码,所以当我尝试插入数据时,我的代码给出了这个错误:

Entities in 'TourismContext.HotelOrders' participate in the 'HotelOrder_Order' relationship. 0 related 'HotelOrder_Order_Target' were found. 1 'HotelOrder_Order_Target' is expected.

这是我的插入代码:

var hotelOrdersInsert = new Data.Entities.HotelOrder
        {
            OrderId = odr.ID           // this gives 7
            HotelID = 13,
            StartAt = DateTime.Now,    // arrivalDate,
            EndAt = DateTime.Now,      // departureDate,
            PaymentTypeID = 1,
            PaymentStatusID = 1,
            PaymentIdentifier = "a",
            TotalRate = Convert.ToDecimal(total),
            CurrencyID = 1
        };

db.HotelOrders.Add(hotelOrdersInsert);
db.SaveChanges();

这是我的HotelOrder课:

public class HotelOrder
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    [Required]
    public int HotelID { get; set; }

    public int OrderId { get; set; }

    // other properties

    public virtual Order Order { get; set; }
    public virtual Hotel Hotel { get; set; }
}

这是我的Order课:

public class Order
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public virtual HotelOrder HotelOrder { get; set; }
}

我在哪里可以找到订单和酒店订单模型之间的关系?

4

2 回答 2

2

您必须按如下方式编写此关系:

public class HotelOrder
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

   [Required]
   public int HotelID { get; set; }

   [ForeignKey("Order")]
   public int OrderId { get; set; }
   public Order Order { get; set; }

   [ForeignKey("Hotel")]
   public int HotelId { get; set; }
   public Hotel Hotel { get; set; }
}

public class Order
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public List<HotelOrder> HotelOrders { get; set; }
}
于 2013-07-08T03:30:51.890 回答
2

问题是HotelOrder 和Order 之间的关系。您很可能是一对一的关系。意思是,每个 HotelOrder 都必须有一个 Order。

这种关系可能是在所谓的 fluent API 中定义的。检查从 DbContext 派生的类的 OnModelCreating(DbModelBuilder) 函数覆盖。它可能会这样说:

modelBuilder.Entity<HotelOrder>().HasRequired(hotel_order => hotel_order.Order).WithRequiredPrincipal();

这告诉 EntityFramework 每个 HotelOrder 都必须有一个 Order。

或者,可以将关系定义为 DataAnnotations。就像 Elvin Mammadov 在他的回答中解释的那样。

这个时候解决办法就很明显了。您需要先将 Order 实例添加到 HotelOrder 实例,然后再将其添加到 db.HotelOrders。

于 2016-10-17T09:33:17.727 回答