Je veux des graines de données avec EfCore à mon Entités qui peuvent être nullable
Entités:
public class RootEntity
{
protected RootEntity() { }
public Guid Id { get; set; }
public OwnedEntityLevel1? OwnedEntityLevel1 { get; set; } // can be nullable
}
public class OwnedEntityLevel1
{
public Guid Id { get; set; }
}
Modèle de configuration pour DbContext:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<RootEntity>(b =>
{
b.OwnsOne(x => x.OwnedEntityLevel1, ob =>
{
ob.HasData(RootEntity.All.Select(x => new
{ x.OwnedEntityLevel1?.Id, RootEntityId = x.Id }));
});
b.HasData(RootEntity.All.Select(x => new { x.Id }));
});
}
Lorsque j'essaie de créer ma migration avec:
dotnet ef migrations add Initial --context NullableObjectDbContext -o Migrations/NullableObject
je reçois l'erreur:
La graine de l'entité par entité de type 'OwnedEntityLevel1' ne peut pas être ajouté, car aucune valeur n'a été fourni pour la propriété "Id".
Le message oviously est correct. Mais je ne comprends pas, si vous pouviez semences nullable objets avec .HasData
en quelque sorte?
Les données que je suis en train de semences:
public static RootEntity PredefinedEntity11 { get; } =
new(
Guid.Parse("96e1d442-bdd0-4c6f-9d01-624b27abbac3"),
new OwnedEntityLevel1
{
Id = Guid.Parse("8f8eea73-0b43-412a-b0aa-a9338db6e067")
}
);
public static RootEntity PredefinedEntity12 { get; } =
new(
Guid.Parse("aae51dac-016e-472e-ad51-2f09f8cb9fbb"),
null! // When i add this the migration fails with The seed entity for entity type 'OwnedEntityLevel1' cannot be added because no value was provided for the required property 'Id'
);
public static IReadOnlyList<RootEntity> All { get; } =
new List<RootEntity>(new[] { PredefinedEntity11, PredefinedEntity12 }).AsReadOnly();
J'ai mon flux de programme normal que je peux ajouter, nullable objets sans problème:
var ctx = new NullableObjectDbContext();
var rootEntity = new RootEntity(Guid.NewGuid(), null);
ctx.Add(rootEntity);
ctx.SaveChanges();
J'ai créé un minimum reproductible exemple ici: https://github.com/enterprisebug/EfCoreHasDataNestedOwnedTypes/tree/main/EfCoreHasDataNestedOwnedTypes/NullableObject
null
les valeurs est la super solution simple. Je n'ai jamais pensé! Vraiment vous remercie de votre entrée!