0

私の前に、ある開発者が最初に Entity Framework コードを使用しました。最初は 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

問題は、HotelOrder と Order の関係です。1対1の関係である可能性が最も高いです。つまり、すべての HotelOrder には Order が必要です。

この関係は、いわゆる流暢な API で定義されている可能性があります。DbContext から派生したクラスの OnModelCreating(DbModelBuilder) 関数オーバーライドを確認します。それはおそらく次のようなことを述べています:

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

これは、すべての HotelOrder に Order が必要であることを EntityFramework に伝えます。

または、関係を DataAnnotations として定義することもできます。Elvin Mammadovが彼の答えで説明したように。

この時点で、解決策が明らかになります。db.HotelOrders に追加する前に、Order のインスタンスを HotelOrder インスタンスに追加する必要があります。

于 2016-10-17T09:33:17.727 に答える