繁体   English   中英

外键实体框架问题

[英]foreign key entity framework issue

我有一个亲子实体:

public class Transaction
{
  public int TransactionId {get; set;}
  public int? OrderId {get; set;}
  public virtual Order Order {get; set;}

} 

public class Order 
{
  public int Id {get; set;}
  public virtual List<OrderItems> OrderItems {get; set;}
}

public class OrderItem
{
  public int Id {get; set;}
  public string Item {get; set;}
  public virtual int OrderId {get; set;}
  public virtual Order Order {get; set;}
}

上下文如下:

   modelBuilder.Entity<Transaction>( )
            .HasKey( x => x.TransactionId )
            .ToTable( "Transactions" );

        modelBuilder.Entity<Transaction>( )
            .HasOptional( x => x.Order )
            .WithMany( )
            .HasForeignKey( t => t.OrderId );

        modelBuilder.Entity<Order>( )
            .HasKey( o => o.Id )
            .ToTable("Orders");

        modelBuilder.Entity<OrderItem>( )
            .HasKey( i => i.Id )
            .ToTable( "OrderItems" );


        modelBuilder.Entity<OrderItem>( )
            .HasRequired( x => x.Order )
            .WithMany( o => o.OrderItems )
            .HasForeignKey( p => p.OrderId );

当我尝试创建Transaction类型的新实体时,类似:

var transaction = new Transaction 
                   {TransactionId = Guid.NewGuid;
                    Order = new Order {OrderItems = new List<OrderItems>{Item="SunCream"}}};

ctx.Transactions.Add(transaction);
ctx.SaveChanges();

我懂了

INSERT语句与FOREIGN KEY约束“ FK_Transactions_Orders_OrderId”冲突。 数据库“事务”表“ dbo.Orders”的“ Id”列中发生了冲突。

我到底在做什么错?

我认为在添加事务之前,需要先将Order对象显式添加到ctx对象。 这样,当您调用.SaveChanges() ,上下文将知道在提交事务之前必须先提交订单。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM