如何在 .NET Core 中添加两个不同库之间的关系
How to add relationship beetween two different libraries in .NET Core
我需要使用代码优先方法在 .NET Core 中的两个库之间构建 link。
我需要在来自标准库的国家 table 和带有贸易表格的 table 之间建立一个 link。
两个库在不同的上下文中运行。
可以单向添加项目之间的关系,因为如果尝试添加双向约束,则会出现循环错误。
有什么方法可以建立这样的关系吗?
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
他做了数据库迁移。
但我不知道是否可以通过这种方式从代码优先的方式在不同的库之间建立关系。
不,无法在 .NET 中进行循环引用。
方案一推荐
在一个项目 DAL 中合并 Standard.DAL 和 Trade.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; }
}
}
我需要使用代码优先方法在 .NET Core 中的两个库之间构建 link。
我需要在来自标准库的国家 table 和带有贸易表格的 table 之间建立一个 link。
两个库在不同的上下文中运行。
可以单向添加项目之间的关系,因为如果尝试添加双向约束,则会出现循环错误。
有什么方法可以建立这样的关系吗?
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 他做了数据库迁移。
但我不知道是否可以通过这种方式从代码优先的方式在不同的库之间建立关系。
不,无法在 .NET 中进行循环引用。
方案一推荐
在一个项目 DAL 中合并 Standard.DAL 和 Trade.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; }
}
}