diff --git a/test/EFCore.Cosmos.FunctionalTests/EmbeddedDocumentsTest.cs b/test/EFCore.Cosmos.FunctionalTests/EmbeddedDocumentsTest.cs index 30da6054959..fa37d48a3db 100644 --- a/test/EFCore.Cosmos.FunctionalTests/EmbeddedDocumentsTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/EmbeddedDocumentsTest.cs @@ -5,10 +5,12 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore.ChangeTracking; using Microsoft.EntityFrameworkCore.Cosmos.Internal; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.TestModels.TransportationModel; using Microsoft.EntityFrameworkCore.TestUtilities; +using Microsoft.EntityFrameworkCore.ValueGeneration; using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json.Linq; using Xunit; @@ -265,6 +267,30 @@ async Task AssertState(EmbeddedTransportationContext context) } } + [ConditionalFact] + public virtual async Task Properties_on_owned_types_can_be_client_generated() + { + var options = Fixture.CreateOptions(seed: false); + + using (var context = new EmbeddedTransportationContext(options)) + { + var address = new Address + { + Street = "First", + City = "City", + AddressTitle = new AddressTitle() + }; + + context.Add(new Person { Id = 1, Addresses = new List
{ address} }); + Assert.Equal("DefaultTitle", address.AddressTitle.Title); + + await context.SaveChangesAsync(); + + var people = await context.Set().ToListAsync(); + Assert.Same(address, people[0].Addresses.Single()); + } + } + [ConditionalFact] public virtual async Task Can_use_non_int_keys_for_embedded_entities() { @@ -569,12 +595,19 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) v => v.Addresses, b => { b.ToJsonProperty("Stored Addresses"); - b.OwnsOne(a => a.AddressTitle); + b.OwnsOne(a => a.AddressTitle).Property(a => a.Title).HasValueGenerator().IsRequired(); b.OwnsMany(a => a.Notes); })); } } + private class TitleGenerator : ValueGenerator + { + public override bool GeneratesTemporaryValues => false; + + public override string Next(EntityEntry entry) => "DefaultTitle"; + } + private abstract class PersonBase { public int Id { get; set; }