Есть ли способ абстрагировать объекты моста в EFCore?C#

Место общения программистов C#
Ответить
Anonymous
 Есть ли способ абстрагировать объекты моста в EFCore?

Сообщение Anonymous »

Я изучаю пространство проектирования, возможное с помощью EFCore 8. Проблема, которую я сейчас изучаю, заключается в попытке абстрагировать часть конфигурации объекта EFCore для объекта-моста, который имеет дополнительные данные.
Давлен следующий абстрактный класс

Код: Выделить всё

public abstract class Bridge where Q : Entity where S : Entity
{
protected internal Q Left { get; set; }
protected internal R LeftId { get; set; }
protected internal S Right { get; set; }
protected internal T RightId { get; set; }
}
У меня есть следующий реализованный мост

Код: Выделить всё

public class TestBridgeEntity : Bridge
{

public LeftSideEntity MyLeftSideEntity { get { return Left; } set { Left = value; } }
public Guid LeftSideEntityId { get { return LeftId; } set { LeftId = value; } }
public RightSideEntity MyRightSideEntity { get { return Right; } set { Right = value; } }
public Guid RightSideEntityId { get { return RightId; } set { RightId = value; } }

public double MyTestData { get; set; }
}

Тогда я надеюсь, что смогу написать метод расширения для оптимизации конфигурации объекта, который выглядит следующим образом:

Код: Выделить всё

    public static EntityTypeBuilder ConfigureBridge(this EntityTypeBuilder builder, string leftIdName, string rightIdName)
where T : Bridge where A: Entity where C:Entity
{
builder.HasKey(x => new { x.LeftId, x.RightId } );

builder.HasOne(x => x.Left).WithMany().HasForeignKey(x => x.LeftId);
builder.HasOne(x => x.Right).WithMany().HasForeignKey(x => x.RightId);

builder.Property(e => e.LeftId).HasColumnName(leftIdName);
builder.Property(e => e.RightId).HasColumnName(rightIdName);

return builder;
}
Затем я бы использовал этот метод расширения внутри класса IEnttiyTypeConfiguration

Код: Выделить всё

internal class MyTestBirdgeEntityConfiguration : IEntityTypeConfiguration
{
public void Configure(EntityTypeBuilder builder)
{
builder.ToTable("test_bridge");
builder.ConfigureBridge("left_side_id", "right_side_id");

builder.Property(e => e.MyTestData ).IsRequired();
}
}

Мой LeftSideEntity имеет следующее соответствующее определение

Код: Выделить всё

public class LeftSideEntity
{
...

public List RightSideEntities { get; }
public List TestBridgeEntities { get; }

...
}
и мой RightSideEntity не имеет ссылки на LeftSideEntities
Когда я пытаюсь создать миграцию базы данных, я получаю следующую ошибку.
Невозможно создать «DbContext» типа «TestDbContext». Исключение «TestBridgeEntity.LeftId» и «TestBridgeEntity.LeftSideEntityId» сопоставляются со столбцом «left_side_id» в «test_bridge», но свойства содержатся в одной и той же иерархии. Все свойства типа сущности должны быть сопоставлены с уникальными столбцами.

Есть ли способ заставить работать такую ​​абстракцию моста сущности? п>

Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-efcore
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»