微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

EntityFramework Core 5,有一个公用表供 2 个不同的实体使用

如何解决EntityFramework Core 5,有一个公用表供 2 个不同的实体使用

场景:

我有一个地址表,里面有你所期望的(街道、城镇、邮政编码等)

我有 2 个其他实体(站点和客户详细信息),这两个实体都有一个地址属性(对结构的另一种思考方式是将 ClientDetails.Address 视为总部,将 Sites/Site.Address 视为全国各地的办公楼)。

我正在尝试找出对关系进行排序,目前它在抱怨,因为当我添加 ClientDetails.Address 时,它在 ClientDetails.Sites.Address FK 约束上失败。

我想我可能需要通过 Fluent API 手动配置关系,但我想如果有人有类似的情况我会问(我确定我不是第一个想要这样做的人)!

我正在尝试使用 CodeFirst 方法执行此操作,我的模型构建器配置中没有其他配置。

该项目使用 .NET 5 和 EF Core 5

我开始认为 Table Splitting 是解决这个问题的方法,但到目前为止我看到的例子对我来说似乎不太有意义。

数据库架构:

enter image description here

错误

enter image description here

ClientDetails.cs

public class ClientDetails
{
    public Guid ClientDetailsId { get; set; }

    public string Name { get; set; }

    public virtual Address Address { get; set; }

    public Byte[] Image { get; set; }

    public List<ClientStaff> Staff { get; set; }

    public List<Site> Sites { get; set; }
}

Site.cs

public class Site
{
    public Guid? SiteId { get; set; }

    public string AccessCode { get; set; }

    public PointOfContact PointOfContact { get; set; }

    public Guid ClientDetailsId { get; set; }

    public ClientDetails ClientDetails { get; set; }

    public virtual Address Address { get; set; } 
}

地址.cs

    public class Address
{
    public Guid AddressId { get; set; }

    public string LineOne { get; set; }

    public string LineTwo { get; set; }

    public string LineThree { get; set; }

    public string PostalCode { get; set; }

    public Guid ClientDetailsId { get; set; }
    public virtual ClientDetails ClientDetails { get; set; }
    public Guid SiteId { get; set; }
    public virtual Site Site { get; set; }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。