Member 14502964 Ответов: 1

Как сопоставить следующие отношения с помощью fluent api


Привет, ребята, можно ли сопоставить сущность Image с таблицей Post и таблицей черновиков, где свойство Image "TypeId" становится внешним ключом либо к таблице Post, либо к таблице черновиков.

В принципе, пост содержит много изображений, а черновик-много изображений. Я хотел бы использовать "TypeId" в качестве внешнего ключа, чтобы я мог запросить его, используя следующий сценарий:

"Выберите * из изображений, где TypeId = Post.Id и тип='Post'" или
"Выберите * из изображений, где TypeId = Черновик.Id и тип='Черновик'"

Также обратите внимание, что я использую EntityFrameworkCore!

 public class Post
{
    public string Id { get; private set; }
    public string Content { get; set; }
    public string UserId { get; set; }
    public DateTime Created { get; set; }
    public DateTime Edited { get; set; }
    public List<Image> Images;
}
 

public class Draft 
{
    public string IdentityGuid { get; private set; }
    public string Id { get; set; }
    public string Content { get; set; }
    public string UserId { get; set; }
    public string Title { get; set; }
    public DateTime Created { get; set; }
    public DateTime Edited { get; set; }
    public List<Image> Images;
}
    
public class Image 
{
    public string UserId { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public int TypeId { get; set; }
    public string Description { get; set; }
    public string Content_Type { get; set; }
    public string Filename { get; set; }
    public string Url { get; set; }
    public long Size { get; set; }
    public DateTime Created { get; set; }
    public DateTime Edited { get; set; }
}


Что я уже пробовал:

public void Configure(EntityTypeBuilder<Draft> draftConfiguration)
{
    draftConfiguration.HasMany(b => b.Images)
      .WithOne()
      .HasForeignKey("TypeId")
      .OnDelete(DeleteBehavior.Cascade);
}


public void Configure(EntityTypeBuilder<Post> postConfiguration)
{
    draftConfiguration.HasMany(b => b.Images)
      .WithOne()
      .HasForeignKey("TypeId")
      .OnDelete(DeleteBehavior.Cascade);
}

		    
                    

1 Ответов

Рейтинг:
1

Gerry Schmitz

Для того чтобы EF "работал правильно", каждая "сущность" требует первичного ключа; я не вижу никакого первичного ключа на "изображении" (или "правильных" ключей на других сущностях, если уж на то пошло).

Отношения, свойства навигации и внешние ключи - EF6 | Microsoft Docs[^]