我在配置模型时不能级联删除。
modeL。
public class Hit
{
public int Id { get; set; }
// Foreign Key
public int AccountId { get; set; }
// Foreign Key
public int LeadId { get; set; }
//navigation properties
[ForeignKey("LeadId")]
public Lead lead { get; set; }
//navigation properties
[ForeignKey("AccountId")]
public Account account { get; set; }
}
Fluent API:
modelBuilder.Entity<Hit>()
.HasRequired(t => t.lead)
.WithMany()
.HasForeignKey(t => t.LeadId)
.WillCascadeOnDelete(false);
当我尝试迁移它时,我在Hit的创建表中得到了这个:
.ForeignKey("dbo.Accounts", t => t.AccountId, cascadeDelete: true)
.ForeignKey("dbo.Leads", t => t.Lead_Id)
.ForeignKey("dbo.Leads", t => t.LeadId, cascadeDelete: true)
我想在迁移脚本中为潜在客户和帐户实现的目标是:
.ForeignKey("dbo.Leads", t => t.LeadId)
我应该怎么做呢?它简直容易,但我对这一切都是新手:(
编辑1:
我将其添加到流畅的API中:
modelBuilder.Entity<Lead>().HasMany(i => i.Hits).WithOptional().HasForeignKey(s=> s.LeadId).WillCascadeOnDelete(false);
删除cascadelete:.ForeignKey(&#34; dbo.Leads&#34;,t =&gt; t.LeadId)
但是,我也希望将其删除:
.ForeignKey("dbo.Accounts", t => t.AccountId, cascadeDelete: true)
简单的解决方案是将其从迁移脚本中删除。但我想如何使用FLuent API或其他方法来做到这一点。
有什么想法吗?
答案 0 :(得分:1)
就像我在上面的评论中已经说过的那样,如果您使用Fluent API映射FK,请从导航属性中删除[ForeignKey]
属性。
然后你可以进行这样的非级联映射:
modelBuilder.Entity<Hit>().HasOptional(m => m.account).WithMany().HasForeignKey(m
=> m.AccountId).WillCascadeOnDelete(false);
最后,您必须检查您的FK列是可选的还是必需的,因为可选映射会将您的FK属性AccountId
和LeadId
更改为数据类型int?
,否则您必须更改FK映射的HasOptional()
部分为HasRequired()
。
答案 1 :(得分:0)
像这样定义你的模型:
public class Hit
{
public int Id { get; set; }
public virtual Lead Lead { get; set; }
public virtual Account Account { get; set; }
}
virtual
关键字将让实体框架知道您正在定义外键并自动匹配Id。
从Fluent API中删除HasRequired(t => t.lead).WithMany()
部分。如果需要一个属性,没有它就不能存在,并且会在删除时级联。