From d16bef05b22ad8ac2c02676dae273852fd86b6f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 28 Nov 2019 18:39:01 +0300 Subject: [PATCH] Resolved #1933: Ignore owned types while configuring the base properties --- .../Abp/EntityFrameworkCore/AbpDbContext.cs | 5 ++++ .../TestMigrationsDbContext.cs | 11 +++++++ .../EntityFrameworkCore/TestAppDbContext.cs | 11 +++++++ .../Volo/Abp/TestApp/Domain/City.cs | 10 +++++++ .../Volo/Abp/TestApp/Domain/District.cs | 30 +++++++++++++++++++ .../Volo/Abp/TestApp/TestDataBuilder.cs | 7 ++++- 6 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/District.cs diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 01c7292be9..18758d98e3 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -347,6 +347,11 @@ namespace Volo.Abp.EntityFrameworkCore protected virtual void ConfigureBaseProperties(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType) where TEntity : class { + if (mutableEntityType.IsOwned()) + { + return; + } + ConfigureConcurrencyStampProperty(modelBuilder, mutableEntityType); ConfigureExtraProperties(modelBuilder, mutableEntityType); ConfigureAuditProperties(modelBuilder, mutableEntityType); diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs index 0f9def32f0..da66392a18 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs @@ -25,12 +25,23 @@ namespace Volo.Abp.EntityFrameworkCore protected override void OnModelCreating(ModelBuilder modelBuilder) { + modelBuilder.Owned(); + base.OnModelCreating(modelBuilder); modelBuilder.Entity(b => { b.HasKey(p => new { p.PersonId, p.Number }); }); + + modelBuilder.Entity(b => + { + b.OwnsMany(c => c.Districts, d => + { + d.WithOwner().HasForeignKey(x => x.CityId); + d.HasKey(x => new { x.CityId, x.Name }); + }); + }); } } } diff --git a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs index 5e243b9a03..289364411d 100644 --- a/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs +++ b/framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs @@ -25,6 +25,8 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore protected override void OnModelCreating(ModelBuilder modelBuilder) { + modelBuilder.Owned(); + base.OnModelCreating(modelBuilder); modelBuilder.Entity(b => @@ -38,6 +40,15 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore p.HasNoKey(); p.ToView("View_PersonView"); }); + + modelBuilder.Entity(b => + { + b.OwnsMany(c => c.Districts, d => + { + d.WithOwner().HasForeignKey(x => x.CityId); + d.HasKey(x => new {x.CityId, x.Name}); + }); + }); } } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs index 76361463d7..cc5a194088 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs @@ -1,4 +1,6 @@ using System; +using System.Collections.Generic; +using System.Linq; using Volo.Abp.Domain.Entities; namespace Volo.Abp.TestApp.Domain @@ -7,6 +9,8 @@ namespace Volo.Abp.TestApp.Domain { public string Name { get; set; } + public ICollection Districts { get; set; } + private City() { @@ -16,6 +20,12 @@ namespace Volo.Abp.TestApp.Domain : base(id) { Name = name; + Districts = new List(); + } + + public int GetPopulation() + { + return Districts.Select(d => d.Population).Sum(); } } } diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/District.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/District.cs new file mode 100644 index 0000000000..13f0f9d5c7 --- /dev/null +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/District.cs @@ -0,0 +1,30 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; + +namespace Volo.Abp.TestApp.Domain +{ + public class District : CreationAuditedEntity + { + public Guid CityId { get; private set; } + + public string Name { get; private set; } + + public int Population { get; set; } + + private District() + { + + } + + public District(Guid cityId, string name, int population = 0) + { + CityId = cityId; + Name = name; + } + + public override object[] GetKeys() + { + return new Object[] {CityId, Name}; + } + } +} \ No newline at end of file diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs index 1f955b3e82..8900d8cfdf 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs @@ -38,10 +38,15 @@ namespace Volo.Abp.TestApp private void AddCities() { + var istanbul = new City(IstanbulCityId, "Istanbul"); + istanbul.Districts.Add(new District(istanbul.Id, "Bakirkoy", 1283999)); + istanbul.Districts.Add(new District(istanbul.Id, "Mecidiyeköy", 2222321)); + istanbul.Districts.Add(new District(istanbul.Id, "Uskudar", 726172)); + _cityRepository.Insert(new City(Guid.NewGuid(), "Tokyo")); _cityRepository.Insert(new City(Guid.NewGuid(), "Madrid")); _cityRepository.Insert(new City(LondonCityId, "London") {ExtraProperties = { { "Population", 10_470_000 } } }); - _cityRepository.Insert(new City(IstanbulCityId, "Istanbul")); + _cityRepository.Insert(istanbul); _cityRepository.Insert(new City(Guid.NewGuid(), "Paris")); _cityRepository.Insert(new City(Guid.NewGuid(), "Washington")); _cityRepository.Insert(new City(Guid.NewGuid(), "Sao Paulo"));