Я пытаюсь связать отношения «многие ко многим» без какого-либо промежуточного класса в моем домене.
Ссылка — SoundProfiles Switches. Они оба не требуются. Я получаю сообщение об ошибке:
Произошла одна или несколько ошибок. (Навигация 'SwitchSoundProfiles (Dictionary).SoundProfileId' не найдена. Добавьте навигацию к типу объекта перед его настройкой.)
Я хочу по возможности избегать использования промежуточного класса, раньше он работал (и сверялся с документацией), но почему-то я, должно быть, делаю что-то неправильно, или, возможно, это просто невозможно. Ниже я включил файлы, на которые есть ссылки.
EntityTypeConfiguration содержит следующее:
builder.HasMany(s => s.SoundProfiles)
.WithMany(sp => sp.Switches)
.UsingEntity(
"SwitchSoundProfiles",
j => j
.HasOne()
.WithMany()
.HasForeignKey("SoundProfileId")
.OnDelete(DeleteBehavior.Cascade),
j => j
.HasOne()
.WithMany()
.HasForeignKey("SwitchId")
.OnDelete(DeleteBehavior.Cascade),
j =>
{
j.ToTable("SwitchSoundProfiles");
j.HasKey("SwitchId", "SoundProfileId");
j.Navigation("SoundProfileId").IsRequired(false);
j.Navigation("SwitchId").IsRequired(false);
});
Для справки я включу оба класса:
Switch (где идентификатор свойства унаследован от базового класса Entity)
public sealed class Switch : Entity
{
public string Name { get; init; } = string.Empty;
public string Manufacturer { get; init; } = string.Empty;
public FeelMechanism FeelMechanism { get; init; } = FeelMechanism.Unknown;
public ICollection SoundProfiles { get; init; } = new List();
public Technology Technology { get; init; } = Technology.Unknown;
public int? PinCount { get; init; }
private Switch() { }
///
/// Creates a new Switch instance with optional classification references.
/// Null classification IDs map to their respective Unknown variants.
///
public static Switch New(
string name,
string manufacturer,
FeelMechanism? feelMechanism,
ICollection? soundProfiles,
Technology? technology,
int? pinCount = null)
{
if (soundProfiles == null || soundProfiles.Count == 0)
{
soundProfiles = new List { SoundProfile.Unknown };
}
return new Switch
{
Name = name.Trim(),
Manufacturer = manufacturer.Trim(),
FeelMechanism = feelMechanism ?? FeelMechanism.Unknown,
SoundProfiles = soundProfiles,
Technology = technology ?? Technology.Unknown,
PinCount = pinCount
};
}
}
SoundProfile.cs (где идентификатор наследуется от EnumEntity, который наследуется от Entity)
public sealed class SoundProfile : EnumEntity
{
public static readonly SoundProfile Unknown = New(Constants.Unknown);
public ICollection Switches { get; private set; } = [];
private SoundProfile() { }
public static SoundProfile New(string name)
=> string.IsNullOrWhiteSpace(name)
? Unknown
: new() { Name = name.Trim() };
}
Другая конфигурация EntityTypeConfiguration, базовая для EnumEntity:
public abstract class EnumEntityTypeConfiguration : IEntityTypeConfiguration
where TEnum : EnumEntity
{
protected readonly string _tableName;
protected readonly int _nameMaxLength;
protected EnumEntityTypeConfiguration(
string tableName,
int nameMaxLength = 200)
{
_tableName = tableName;
_nameMaxLength = nameMaxLength;
}
public void Configure(EntityTypeBuilder builder)
{
builder.ToTable(_tableName);
builder.HasKey(e => e.Id);
builder.Property(e => e.Id)
.ValueGeneratedOnAdd();
builder.Property(e => e.Name)
.IsRequired()
.HasMaxLength(_nameMaxLength);
builder.HasIndex(e => e.Name)
.IsUnique();
ConfigureEnum(builder);
}
///
/// Allows derived configurations to add additional mapping logic.
///
protected virtual void ConfigureEnum(EntityTypeBuilder builder)
{
}
}
И реализация SoundProfile.cs, а также Technology.cs:
public sealed class SoundProfileConfiguration
: EnumEntityTypeConfiguration
{
public SoundProfileConfiguration()
: base("SwitchSoundProfiles") { }
}
public sealed class TechnologyConfiguration
: EnumEntityTypeConfiguration
{
public TechnologyConfiguration()
: base("SwitchTechnologies") { }
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... te-c-sharp
Определение связи «многие-ко-многим» с именами внешних ключей таблицы соединений без конкретной таблицы домена С# (тенев ⇐ C#
Место общения программистов C#
1763400690
Anonymous
Я пытаюсь связать отношения «многие ко многим» без какого-либо промежуточного класса в моем домене.
Ссылка — SoundProfiles Switches. Они оба не требуются. Я получаю сообщение об ошибке:
Произошла одна или несколько ошибок. (Навигация 'SwitchSoundProfiles (Dictionary).SoundProfileId' не найдена. Добавьте навигацию к типу объекта перед его настройкой.)
Я хочу по возможности избегать использования промежуточного класса, раньше он работал (и сверялся с документацией), но почему-то я, должно быть, делаю что-то неправильно, или, возможно, это просто невозможно. Ниже я включил файлы, на которые есть ссылки.
EntityTypeConfiguration содержит следующее:
builder.HasMany(s => s.SoundProfiles)
.WithMany(sp => sp.Switches)
.UsingEntity(
"SwitchSoundProfiles",
j => j
.HasOne()
.WithMany()
.HasForeignKey("SoundProfileId")
.OnDelete(DeleteBehavior.Cascade),
j => j
.HasOne()
.WithMany()
.HasForeignKey("SwitchId")
.OnDelete(DeleteBehavior.Cascade),
j =>
{
j.ToTable("SwitchSoundProfiles");
j.HasKey("SwitchId", "SoundProfileId");
j.Navigation("SoundProfileId").IsRequired(false);
j.Navigation("SwitchId").IsRequired(false);
});
Для справки я включу оба класса:
Switch (где идентификатор свойства унаследован от базового класса Entity)
public sealed class Switch : Entity
{
public string Name { get; init; } = string.Empty;
public string Manufacturer { get; init; } = string.Empty;
public FeelMechanism FeelMechanism { get; init; } = FeelMechanism.Unknown;
public ICollection SoundProfiles { get; init; } = new List();
public Technology Technology { get; init; } = Technology.Unknown;
public int? PinCount { get; init; }
private Switch() { }
///
/// Creates a new Switch instance with optional classification references.
/// Null classification IDs map to their respective Unknown variants.
///
public static Switch New(
string name,
string manufacturer,
FeelMechanism? feelMechanism,
ICollection? soundProfiles,
Technology? technology,
int? pinCount = null)
{
if (soundProfiles == null || soundProfiles.Count == 0)
{
soundProfiles = new List { SoundProfile.Unknown };
}
return new Switch
{
Name = name.Trim(),
Manufacturer = manufacturer.Trim(),
FeelMechanism = feelMechanism ?? FeelMechanism.Unknown,
SoundProfiles = soundProfiles,
Technology = technology ?? Technology.Unknown,
PinCount = pinCount
};
}
}
SoundProfile.cs (где идентификатор наследуется от EnumEntity, который наследуется от Entity)
public sealed class SoundProfile : EnumEntity
{
public static readonly SoundProfile Unknown = New(Constants.Unknown);
public ICollection Switches { get; private set; } = [];
private SoundProfile() { }
public static SoundProfile New(string name)
=> string.IsNullOrWhiteSpace(name)
? Unknown
: new() { Name = name.Trim() };
}
Другая конфигурация EntityTypeConfiguration, базовая для EnumEntity:
public abstract class EnumEntityTypeConfiguration : IEntityTypeConfiguration
where TEnum : EnumEntity
{
protected readonly string _tableName;
protected readonly int _nameMaxLength;
protected EnumEntityTypeConfiguration(
string tableName,
int nameMaxLength = 200)
{
_tableName = tableName;
_nameMaxLength = nameMaxLength;
}
public void Configure(EntityTypeBuilder builder)
{
builder.ToTable(_tableName);
builder.HasKey(e => e.Id);
builder.Property(e => e.Id)
.ValueGeneratedOnAdd();
builder.Property(e => e.Name)
.IsRequired()
.HasMaxLength(_nameMaxLength);
builder.HasIndex(e => e.Name)
.IsUnique();
ConfigureEnum(builder);
}
///
/// Allows derived configurations to add additional mapping logic.
///
protected virtual void ConfigureEnum(EntityTypeBuilder builder)
{
}
}
И реализация SoundProfile.cs, а также Technology.cs:
public sealed class SoundProfileConfiguration
: EnumEntityTypeConfiguration
{
public SoundProfileConfiguration()
: base("SwitchSoundProfiles") { }
}
public sealed class TechnologyConfiguration
: EnumEntityTypeConfiguration
{
public TechnologyConfiguration()
: base("SwitchTechnologies") { }
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79821758/defining-many-to-many-with-join-table-foreign-key-names-without-concrete-c-sharp[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия