Я использую Entity Framework Core 2.2 для управления базой данных торгуемых валют на SQL Server.В модели есть две сущности.Первая - это Currency
, которая указывает торговую валюту, а другая - CurrencyPair
, которая указывает пару валют, которые можно обменять друг на друга.
public class Currency
{
public ulong Id { get; set; }
public string Name {get; set; }
[NotMapped]
public IEnumerable<CurrencyPair> Pairs
{
get { PairsAsBase?.Concat( PairsAsQuote ?? new CurrencyPair[0] ); }
}
public virtual IEnumerable<CurrencyPair> PairsAsBase { get; set; }
public virtual IEnumerable<CurrencyPair> PairsAsQuote { get; set; }
}
public class CurrencyPair
{
public ulong Id { get; set; }
public string Name { get; set; }
public ulong BaseCurrencyId { get; set; }
public ulong QuoteCurrencyId { get; set; }
public virtual Currency BaseCurrency { get; set; }
public virtual Currency QuoteCurrency { get; set; }
}
Я бы хотелограничьте таблицу CurrencyPair
, чтобы в строках не было одинаковых Currency
для полей BaseCurrency
и QuoteCurrency
.То есть, если конкретная валюта имеет Id = 1
, то валютная пара с указанием BaseCurrencyId = 1
и QuoteCurrencyId = 1
не будет разрешена.
Вот моя реализация DbContext.OnModelCreating
:
protected override void OnModelCreating( ModelBuilder modelBuilder )
{
modelBuilder.Entity<Currency>().HasKey(x => x.Id);
modelBuilder.Entity<Currency>().HasAlternateKey(x => x.Name);
modelBuilder.Entity<Currency>()
.HasMany(x => x.PairsAsBase)
.WithOne(x => x.BaseCurrency)
.HasForeignKey(x => x.BaseCurrencyId);
modelBuilder.Entity<Currency>()
.HasMany(x => x.PairsAsQuote)
.WithOne(x => x.QuoteCurrency)
.HasForeignKey(x => x.QuoteCurrencyId);
modelBuilder.Entity<CurrencyPair>().HasKey(x => x.Id);
modelBuilder.Entity<CurrencyPair>()
.HasOne(x => x.BaseCurrency)
.WithMany(x => x.PairsAsBase)
.HasForeignKey(x => x.BaseCurrencyId);
modelBuilder.Entity<CurrencyPair>()
.HasOne(x => x.QuoteCurrency)
.WithMany(x => x.PairsAsQuote)
.HasForeignKey(x => x.QuoteCurrencyId);
}
TL; DR : Как я могу убедиться, что два столбца внешнего ключа в таблице не ссылаются на один и тот же объект (используя Entity Framework Core 2.2)?