流利 api 级联删除关系到一个 table
Fluent api Cascade delete on relationships to one table
我有以下配置。我有一个用户。用户有一个邮政地址和一个物理地址(见下文)。
public class UserProfile
{
public Guid UserProfileId {get; set;}
public Guid PostalAddressId {get;set;}
public virtual Address PostalAddress {get;set;}
public Guid PhysicalAddressId {get;set;}
public virtual Address PhysicalAddress {get;set;}
}
public class Address{
public Guid AddressId {get;set;}
public string LineOne {get;set;}
public string LineTwo {get;set;}
public string LineThree {get;set;}
}
接下来是我的流利映射
public UserProfileMapping()
{
ToTable("UserProfile");
HasKey(pk => pk.UserProfileId);
Property(pr => pr.UserProfileId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
HasRequired(a => a.PostalAddress).WithMany().HasForeignKey(fk => fk.PostalAddressId);
HasRequired(a => a.PhysicalAddress).WithMany().HasForeignKey(fk => fk.PhysicalAddressId);
}
public AddressMapping()
{
ToTable("Address");
HasKey(pk => pk.AddressId);
Property(pr => pr.AddressId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
当我尝试 运行 更新数据库时,我得到:
Introducing FOREIGN KEY constraint
'FK_dbo.UserProfile_dbo.Address_PhysicalAddressId' on table
'UserProfile' may cause cycles or multiple cascade paths. Specify ON
DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY
constraints.
我被要求在 Address 对象上不能有任何反向映射。
我还需要能够硬删除 UserProfile 对象,包括它的子地址(地址 table 中只有两个)。
我的问题是,我想要的可能吗?如果是这样,我做错了什么?
[编辑]
Address 对象也用于 UserCompany 和 Customer 等对象。
因为地址不是 UserProfile 的子级,而只是关联,所以您不想使用级联删除:
HasRequired(a => a.PostalAdress)
.WithMany()
.HasForeignKey(fk => fk.PostalAddressId)
.WillCascadeDelete(false);
我有以下配置。我有一个用户。用户有一个邮政地址和一个物理地址(见下文)。
public class UserProfile
{
public Guid UserProfileId {get; set;}
public Guid PostalAddressId {get;set;}
public virtual Address PostalAddress {get;set;}
public Guid PhysicalAddressId {get;set;}
public virtual Address PhysicalAddress {get;set;}
}
public class Address{
public Guid AddressId {get;set;}
public string LineOne {get;set;}
public string LineTwo {get;set;}
public string LineThree {get;set;}
}
接下来是我的流利映射
public UserProfileMapping()
{
ToTable("UserProfile");
HasKey(pk => pk.UserProfileId);
Property(pr => pr.UserProfileId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
HasRequired(a => a.PostalAddress).WithMany().HasForeignKey(fk => fk.PostalAddressId);
HasRequired(a => a.PhysicalAddress).WithMany().HasForeignKey(fk => fk.PhysicalAddressId);
}
public AddressMapping()
{
ToTable("Address");
HasKey(pk => pk.AddressId);
Property(pr => pr.AddressId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
当我尝试 运行 更新数据库时,我得到:
Introducing FOREIGN KEY constraint 'FK_dbo.UserProfile_dbo.Address_PhysicalAddressId' on table 'UserProfile' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
我被要求在 Address 对象上不能有任何反向映射。 我还需要能够硬删除 UserProfile 对象,包括它的子地址(地址 table 中只有两个)。
我的问题是,我想要的可能吗?如果是这样,我做错了什么?
[编辑] Address 对象也用于 UserCompany 和 Customer 等对象。
因为地址不是 UserProfile 的子级,而只是关联,所以您不想使用级联删除:
HasRequired(a => a.PostalAdress)
.WithMany()
.HasForeignKey(fk => fk.PostalAddressId)
.WillCascadeDelete(false);