Seed entity with owned property

后端 未结 5 1990
深忆病人
深忆病人 2021-02-12 13:41

I am trying to seed an user entity in my database. The User entity has an owend property EmailPermissions.

When I run the command

5条回答
  •  醉梦人生
    2021-02-12 14:30

    Currently this information is missing from the documentation (tracked by #710: Document how to seed owned types). It's explained by EF Core team (with example) in the #12004: Problem seeding data that contains owned type thread:

    Owned types must be seeded with a HasData call after the OwnsOne call. Also, since owned types by convention have a primary key generated in shadow state, and since seed data requires keys to be defined, then this requires use of an anonymous type and setting the key.

    which is basically what the exception message is telling you.

    Following the advice, you should remove the instantiation of the EmailPermissions property from the constructor and add a seeding code like this:

    builder.Entity().OwnsOne(e => e.EmailPermissions).HasData(
        new
        {
            UserId = "37846734-172e-4149-8cec-6f43d1eb3f60",
            // other properties ...
        }
    );
    

    Quite annoying and error prone due to the need to know the shadow PK name and the usage of an anonymous type. As the same member mentioned

    Note that this would become easier if navigations were supported for seeding, which is tracked by #10000: Data Seeding: Add support for navigations

提交回复
热议问题