C # Faker Bogus создает собственность - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь поиграть с библиотекой Bogus, чтобы сгенерировать случайные начальные данные в приложении .Net Core 2.1, используя EF Core для управления данными.

У меня есть объект под названием Company, которому принадлежит Address;это отношение один к одному.

Модель компании:

    public class Company
{
    public long Id { get; set; }
    [Required]
    public Address Address { get; set; }
    public string Phone { get; set; }
    public string Email { get; set; }
    public string Website { get; set; }
}

Модель адреса:

public class Address : IValidatableObject
{
    public long Id { get; set; }
    public string Street1 { get; set; }
    public string Street2 { get; set; }
    public string ZipCode { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
}

Код заполнения, доступный в моем DbContext:

 var TestAddresses = new Faker<Address>()
            .RuleFor(o => o.Id, f => aId++)
            .RuleFor(o => o.Street1, f => f.Address.StreetAddress(true))
            .RuleFor(o => o.Country, f => f.Address.Country())
            .RuleFor(o => o.City, f => f.Address.City());

        var c = new Faker<Company>()
            .RuleFor(o => o.Id, f => f.IndexFaker+1)

            .RuleFor(o => o.RegisteredAddress, f => TestAddresses.Generate())
            .RuleFor(o => o.Phone, f => f.Phone.ToString())
            .RuleFor(o => o.Email, f => f.Internet.Email())
            .FinishWith((f, u) =>
            {
                Console.WriteLine("Company created! Id = {0}", u.Id);
            });

        b.Entity<Company>().HasData(c.Generate(100).ToArray());

При выполнении кода я получаю следующее исключение: System.InvalidOperationException: «Начальный объект для типа объекта« Компания »не может быть добавлен, поскольку не было предоставлено значение для обязательного свойства RegisteredAddressId»''

1 Ответ

0 голосов
/ 06 декабря 2018

Вы должны указать значение для RegisteredAddressId при заполнении, вы не можете зависеть от автогенерации вашей базой данных здесь.См. https://github.com/aspnet/EntityFrameworkCore/issues/11776#issuecomment-383756228:

Просто чтобы понять, почему сгенерированные хранилищем значения здесь не поддерживаются.Идея наличия данных в модели состоит в том, что когда модель развивается, начальные данные в базе данных развиваются вместе с ней.Но чтобы это работало, каждый объект в модели должен иметь хорошо известное значение ключа, чтобы его можно было найти и обновить позже.Не стесняйтесь использовать более традиционные механизмы заполнения, например, для тестов, которым просто нужно инициализировать некоторые данные в пустую базу данных.

...