我有两张桌子Cargo
和CargoMovement
如下:
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解决方案。
对于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);