实体:Address
和Market
:
public class Address
{
...
// Navigation properties
public Guid MarketId { get; set; }
public Market Market { get; set; }
}
public class Market
{
...
// Navigation properties
public Guid AddressId { get; set; }
public Address Address { get; set; }
}
相关规则:
Market
都有一个Address
,而没有Market
的{{1}}就不存在。 Address
是必需的Address
的{{1}} Address
时,其Market
必须自动删除是否可以使用Entity Framework Core和Fluent API配置以上关系?
我已经了解了与EF Core的一对一关系,并且了解到我需要说出哪个实体是主体,哪个实体是从属。而且我必须使用Fluent API来做到这一点。
我尝试了两种方法:
Market
的{{1}}(违反规则1)。需要现有的Address
来添加Market
。然后用户可以删除属于Address
的{{1}}(违反规则2)。Market
Address
作为主体:通过这种方法,只有规则3被打破。用户不能在没有Address
的情况下添加Market
,换句话说,需要现有的builder.Entity<Market>()
.HasOne<Address>(m => m.Address)
.WithOne(a => a.Market)
.HasForeignKey<Address>(a => a.MarketId)
.OnDelete(DeleteBehavior.Cascade);
来添加Address
。用户无法删除属于Market
的{{1}},因为在DeleteBehavior上,该关系被设置为Restrict。但是,如果用户删除Address
,则其Address
不会自动删除。 API必须对此进行处理。Market
我不确定是否正确设置了关系,或者仅仅是EF Core的限制。有帮助吗?
答案 0 :(得分:0)
Fluent API应该无法满足您当前的需求,因为您的需求是正常需求的contrary
。
根据常规逻辑,Address
是主表,它不附加到Market
表,因此,当删除Market
表数据时,不应影响{ {1}}表。
但是,如果必须删除,则还有另外两种选择。
第一个是直接删除相应的数据Address
,您可以根据当前删除的市场数据的外键in the code logic after you delete the Market's data
获取地址数据,然后将其删除。
第二,您可以在数据库中创建AddressId
,以确保在删除市场数据时,相应的地址数据也被删除,逻辑与第一个相同。