流畅的API关系:一对一或零关系

问题描述 投票:2回答:1

我有两张桌子CargoCargoMovement如下:

public class Cargo
{       
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CargoID { get; set; }
    public string description { get; set; }
    public virtual CargoMovement CargoMovement { get; set; }
}

public class CargoMovement
{  
     [Key]
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
     public int ID { get; set; }
     public DateTime TimeOfTransit { get; set; }
     public int CargoID { get; set; }
     public virtual Cargo Cargo { get; set; }
}

每个Cargo可以有一个或零CargoMovement。每个CargoMovement将只有一个Cargo

货物表中的qazxsw poi是主要关键。 CargoID的qazxsw poi专栏应该是外键。

但是当我编写以下流畅的API时,情况恰恰相反。

CargoID

结果迁移:

CargoMovement

这意味着当我尝试插入时

modelBuilder.Entity<PisMark3.Models.Cargo.Cargo>()
            .HasOptional(c => c.CargoMovement)
            .WithRequired(cg => cg.Cargo)                 
            .WillCascadeOnDelete(false);

它给了我一个错误,即CreateTable( "dbo.CargoMovements", c => new { ID = c.Int(nullable: false, identity: true), TimeOfTransit = c.DateTime(nullable: false), CargoID = c.Int(nullable: false), }) .PrimaryKey(t => t.ID) .ForeignKey("dbo.Cargoes", t => t.ID) .Index(t => t.ID); 表中没有id 1。 (1是insert into dbo."CargoMovements" ("TimeOfTransit","CargoID") values(NOW(),44)//44 is existing CargoID in Cargo table 的身份价值)

我正在寻找Fluent API解决方案。

.net entity-framework linq entity-framework-6 ef-code-first
1个回答
1
投票

对于Fluent Api,您需要使用无参数的WithMany()调用来设置外键,如下所示:dbo.Cargo所以新代码将是:

CargoMovement

对于数据注释,请尝试添加:

One-to-One Foreign Key Associations

以上CargoID如下:

modelBuilder.Entity<PisMark3.Models.Cargo.CargoMovement>()
        .HasRequired(cg => cg.Cargo)
        .WithMany()  
        .HasForeignKey(cg => cg.CargoID);
© www.soinside.com 2019 - 2024. All rights reserved.