我有一个Cat和Dog表,我想为Image表创建多对多关系。我不想为每个表(DogImage,CatImage,BirdImage等)创建连接表,所以我想我会创建一个EntityImage连接表,然后使用Type字段来了解它是什么类型的图像。这是我对下面模型的尝试,但是这会在EntityImage表中创建CatId,DogId等外键,而不是使用我试图定义的EntityId。有谁知道如何使用最新的Entity Framework Core正确处理这个问题? 谢谢!
public class Cat
{
[Key] public int CatId { get; set; }
public string CatName { get; set; }
public ICollection<EntityFile> Files { get; } = new List<EntityFile>();
}
public class Dog
{
[Key] public int DogId{ get; set; }
public string DogName { get; set; }
public ICollection<EntityImage> Images { get; } = new List<EntityImage>();
}
public class Image
{
[Key] public int ImageId { get; set; }
public string ImageName{ get; set; }
public Byte[] Content { get; set; }
}
public class EntityImage
{
public int EntityId { get; set; }
public int ImageId { get; set; }
public int ImageType { get; set; }
public Image Image { get; set; }
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<EntityImage>().ToTable("EntityImage").HasKey(t => new { t.EntityId, t.ImageId });
}
答案 0 :(得分:0)
EF Core还没有一些更复杂的关系处理(例如分层)。
在您的特定示例中,您可以使用
public class Animal {
public string Name {get; set;}
public byte[] Image {get; set;}
}
public class Cat : Animal {
public int Id {get; set;}
}
public class Dog : Animal {
public int Id {get; set;}
}
在EF 6中,你可以拥有Animal,Dog&amp;猫都去了不同的桌子。 EF会设置钥匙和钥匙。导航领域为您服务。对象的类型(Dog / Cat)将控制您将看到的Animal中的哪些记录。请注意,这是一对一关系(分层)的特殊情况。
你提到过很多人,但我发现两只动物不太可能拥有相同的图像,如果物种名称重复是一个问题,请将名称移至派生类(狗/猫)。
在某些时候EF Core可能会这样做,我还没有看到它(DataAnnotation / Fluent)。