【问题标题】:How to add relationship beetween two different libraries in .NET Core如何在 .NET Core 中添加两个不同库之间的关系
【发布时间】:2021-11-17 14:41:36
【问题描述】:

我需要使用代码优先的方法在 .NET Core 中的两个库之间建立链接。

我需要在标准库中的国家表和带有贸易表格的表之间建立一个链接。

两个库都在不同的上下文中运行。

项目之间的关系可以单向添加,因为如果您尝试添加双向约束,则会出现循环错误。

有没有办法建立这样的关系?

public class CountryStandard
{
    [Key]
    public int IdCountryStandard { get; set; }
    [Required(ErrorMessage = "Select Country")]
    [Display(Name = "Name Country")]
    [MaxLength(80, ErrorMessage = "Name max 80")]
    public string NameCountryStandard { get; set; }
    public bool IsActive { get; set; }
    [JsonIgnore]
    //public virtual Standard Standard { get; set; }
    public virtual ICollection<Standard> Standard { get; set; }
    public virtual ICollection<TradeForms> TradeForms { get; set; }
}

public class TradeForms
{
    [Key]
    public int TradeFormsId { get; set; }
    /...
    .../
    public int IdCountryStandard { get; set; }
    public CountryStandard CountryStandard { get; set; }
}

建立关系后,我将添加到 Fluent API 他做了数据库迁移。

但我不知道是否有可能以这种方式从代码优先建立单独的库之间的关系。

【问题讨论】:

  • 你能指定场景吗?也许有更多代码?
  • 我已经添加了类的代码,我想在这些类之间建立关系
  • 我从标准库下载状态。之后标准将显示在表格中。通过类之间的关系,我想从标准库中取状态的名称。

标签: c# database .net-core ef-code-first


【解决方案1】:

不,不可能在 .NET 中进行循环引用。

我推荐的解决方案 1

将 Standard.DAL 和 Trade.DAL 合并到一个项目 DAL 中。

解决方案 2

删除 Standard.DAL 中对 Trade.DAL 的所有引用。例如使用 CountryStandard :

public class CountryStandard
{
    [Key]
    public int IdCountryStandard { get; set; }
    ...
    public virtual ICollection<Standard> Standard { get; set; }
    // Remove - public virtual ICollection<TradeForms> TradeForms { get; set; }
}

解决方案 3

如果你真的需要这个导航属性,你可以应用方案 2 并扩展标准实体来添加移除的导航属性。例如使用 Standard.DAL.CountryStandard,您可以在 Trade.DAL 项目中扩展为:

namespace Trade.DAL
{
    public class TradeCountry : CountryStandard
    {
        public ICollection<TradeForms> TradeForms { get; set; }
    }
}

然后在上下文中:

namespace Trade.DAL
{
    public class TradeEntities : DbContext
    {
        ...

        public DbSet<TradeForms> TradeForms { get; set; }
        public DbSet<TradeCountry> TradeCountries { get; set; }
    }
}

【讨论】:

  • 非常感谢您解释和编写代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2023-03-07
相关资源
最近更新 更多