Browse Source

Resolved #1933: Ignore owned types while configuring the base properties

pull/2282/head
Halil İbrahim Kalkan 7 years ago
parent
commit
d16bef05b2
  1. 5
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs
  2. 11
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/EntityFrameworkCore/TestMigrationsDbContext.cs
  3. 11
      framework/test/Volo.Abp.EntityFrameworkCore.Tests/Volo/Abp/TestApp/EntityFrameworkCore/TestAppDbContext.cs
  4. 10
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/City.cs
  5. 30
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Domain/District.cs
  6. 7
      framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/TestDataBuilder.cs

5
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs

@ -347,6 +347,11 @@ namespace Volo.Abp.EntityFrameworkCore
protected virtual void ConfigureBaseProperties<TEntity>(ModelBuilder modelBuilder, IMutableEntityType mutableEntityType)
where TEntity : class
{
if (mutableEntityType.IsOwned())
{
return;
}
ConfigureConcurrencyStampProperty<TEntity>(modelBuilder, mutableEntityType);
ConfigureExtraProperties<TEntity>(modelBuilder, mutableEntityType);
ConfigureAuditProperties<TEntity>(modelBuilder, mutableEntityType);

11
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<District>();
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Phone>(b =>
{
b.HasKey(p => new { p.PersonId, p.Number });
});
modelBuilder.Entity<City>(b =>
{
b.OwnsMany(c => c.Districts, d =>
{
d.WithOwner().HasForeignKey(x => x.CityId);
d.HasKey(x => new { x.CityId, x.Name });
});
});
}
}
}

11
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<District>();
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Phone>(b =>
@ -38,6 +40,15 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore
p.HasNoKey();
p.ToView("View_PersonView");
});
modelBuilder.Entity<City>(b =>
{
b.OwnsMany(c => c.Districts, d =>
{
d.WithOwner().HasForeignKey(x => x.CityId);
d.HasKey(x => new {x.CityId, x.Name});
});
});
}
}
}

10
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<District> Districts { get; set; }
private City()
{
@ -16,6 +20,12 @@ namespace Volo.Abp.TestApp.Domain
: base(id)
{
Name = name;
Districts = new List<District>();
}
public int GetPopulation()
{
return Districts.Select(d => d.Population).Sum();
}
}
}

30
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};
}
}
}

7
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"));

Loading…
Cancel
Save