【发布时间】:2019-02-21 09:25:21
【问题描述】:
我有两张表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。
Cargo 表中的CargoID 是主键。 CargoMovement 中的 CargoID 列应该是外键。
但是当我编写以下 fluent API 时,情况正好相反。
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);
这意味着当我尝试插入时
insert into dbo."CargoMovements" ("TimeOfTransit","CargoID")
values(NOW(),44)//44 is existing CargoID in Cargo table
它给了我一个错误,dbo.Cargo 表中没有 id 1。 (1为CargoMovement的标识值)
我正在寻找 Fluent API 解决方案。
【问题讨论】:
标签: .net entity-framework linq entity-framework-6 ef-code-first