Сопоставление сущностей EF с сообщениями gRPC Protobuf - PullRequest
0 голосов
/ 13 апреля 2019

Я начал экспериментировать с gRPC, и я хотел бы иметь возможность отображать мои сущности БД в сообщениях protobuf, используя automapper. Но я не могу понять, как отобразить повторяющиеся поля.

Мои определения сообщений выглядят так:

message WorklistResponse {
    repeated WorklistMessage Worklists = 1;
}

message WorklistMessage {
    int32 WorklistId = 1;
    repeated CollectionWorkMessage Work = 2;
}

message CollectionWorkMessage {
    int32 WorkId = 1;
    string AddressComment = 2;
}

И я пытаюсь сопоставить сущность, которая выглядит следующим образом:

[Table("Worklist")]
public sealed class DbWorklist
{
    public DbWorklist()
    {
        Work = new HashSet<DbWork>();
    }

    [Key]
    public int WorklistId { get; set; }
    public ICollection<DbWork> Work { get; set; }
}

Где связанные сущности DbWork является абстрактным базовым классом для DbCollectionWork и выглядят так:

[Table("Work")]
public abstract class DbWork
{
    [Key]
    public int WorkId { get; set; }
    public int WorklistId { get; set; }

    [ForeignKey(nameof(WorklistId))]
    public DbWorklist Worklist { get; set; }
}

public sealed class DbCollectionWork : DbWork
{
    [StringLength(255)]
    public string AddressComment { get; set; }
}

У меня настроено два сопоставления:

cfg.CreateMap<DbWorklist, WorklistMessage>();
cfg.CreateMap<DbCollectionWork, CollectionWorkMessage>();

Я могу сделать это:

var worklists = dbContext.Worklists.Include(wl => wl.Work).ToList();
var worklistWork = autoMapper.Map<List<CollectionWorkMessage>>(worklists[0].Work);

var worklistResponse = new WorklistResponse
{
    Worklists = { new WorklistMessage
    {
        Work = { worklistWork }
    }}
};

Кажется, это единственный способ установить свойство Work, которое является protobuf3 RepeatedField<CollectionWorkMessage>, которое становится доступным только для чтения в автоматически сгенерированном классе protobuf. * ​​1019 *

Я бы хотел составить свое сообщение с помощью автоматического преобразователя.

Я использую AutoMapper 8.0, Grpc 1.19.0, Protobuf 3.7.0 и EF Core 2.2.4

...