代码之家  ›  专栏  ›  技术社区  ›  Данаил Добрев

Ef核心数据种子

  •  0
  • Данаил Добрев  · 技术社区  · 3 年前

    大家好,我对数据播种有意见。当我尝试为这个实体播种时:

    modelBuilder.Entity<Place>().HasData(new Place
            {
                Id = Guid.NewGuid().ToString(),
                Name = "Europe",
                PlaceIsContainedIn = new Place
                {
                    Id = Guid.NewGuid().ToString(),
                    IdPlaceIsContainedIn = Guid.NewGuid().ToString(),
                    Name = "Bulgaria",
                    LevelNo = 0,
                }
            });
    

    出现以下错误:

    无法添加实体类型“Place”的种子实体,因为它设置了导航“PlaceIsContainerIn”。若要为关系设定种子,请将实体种子添加到“Place”并指定外键值{“IdPlaceIsContainerIn”}。

    我有这个Place类:

    public class Place
    {
        public string Id { get; set; } = Guid.NewGuid().ToString();
    
        [ForeignKey(nameof(PlaceIsContainedIn))]
        public string? IdPlaceIsContainedIn { get; set; }
    
        public Place PlaceIsContainedIn { get; set; }
    
        public string Name { get; set; }
    
        public int LevelNo { get; set; }
    
        public ICollection<Contact> ContinentContacts { get; set; } = new HashSet<Contact>();
    
        public ICollection<Contact> CountryContacts { get; set; } = new HashSet<Contact>();
    
        public ICollection<Contact> CityContacts { get; set; } = new HashSet<Contact>();
    }
    

    这是我的背景:

    modelBuilder.Entity<Place>().Property(x => x.Name).HasColumnType("nvarchar(50)");
            modelBuilder.Entity<Place>().Property(x => x.LevelNo).HasColumnType("tinyint");
            modelBuilder.Entity<Place>().HasOne(x => x.PlaceIsContainedIn).WithMany().OnDelete(DeleteBehavior.Restrict);
            modelBuilder.Entity<Place>().Property(x => x.IdPlaceIsContainedIn).IsRequired(false);
    

    请,如果有人知道如何解决这个问题,如果你能和我分享,我会很高兴。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Michael    3 年前

    只能通过外键映射它们

         modelBuilder.Entity<Place>().HasData(
                       new 
                    {
                        Id = "dsfsdg",
                        Name = "Bulgaria",
                        LevelNo = 0,
                        
                    }, 
                       new
                    {
                        Id = "423412fsd",
                        Name = "Europe",
                        IdPlaceIsContainedIn  ="dsfsdg" //pk of the above entity
                    } 
                       );