Browse Source

#695 Create a single method to configure EF core entity mapping by convention

pull/696/head
Halil ibrahim Kalkan 8 years ago
parent
commit
1bbd6d761b
  1. 48
      framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs

48
framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/Modeling/AbpEntityTypeBuilderExtensions.cs

@ -1,4 +1,5 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders; using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -11,25 +12,52 @@ namespace Volo.Abp.EntityFrameworkCore.Modeling
{ {
public static class AbpEntityTypeBuilderExtensions public static class AbpEntityTypeBuilderExtensions
{ {
public static void ConfigureByConvention(this EntityTypeBuilder b)
{
b.TryConfigureConcurrencyStamp();
b.TryConfigureExtraProperties();
//TODO: Others
}
public static void ConfigureConcurrencyStamp<T>(this EntityTypeBuilder<T> b) public static void ConfigureConcurrencyStamp<T>(this EntityTypeBuilder<T> b)
where T : class, IHasConcurrencyStamp where T : class, IHasConcurrencyStamp
{ {
b.Property(x => x.ConcurrencyStamp) b.As<EntityTypeBuilder>().TryConfigureConcurrencyStamp();
.IsConcurrencyToken() }
.HasColumnName(nameof(IHasConcurrencyStamp.ConcurrencyStamp));
public static void TryConfigureConcurrencyStamp(this EntityTypeBuilder b)
{
if (b.Metadata.ClrType.IsAssignableTo<IHasConcurrencyStamp>())
{
//TODO: Max length?
b.Property<string>(nameof(IHasConcurrencyStamp.ConcurrencyStamp))
.IsConcurrencyToken()
.HasColumnName(nameof(IHasConcurrencyStamp.ConcurrencyStamp));
}
} }
public static void ConfigureExtraProperties<T>(this EntityTypeBuilder<T> b) public static void ConfigureExtraProperties<T>(this EntityTypeBuilder<T> b)
where T : class, IHasExtraProperties where T : class, IHasExtraProperties
{ {
b.Property(x => x.ExtraProperties) b.As<EntityTypeBuilder>().TryConfigureExtraProperties();
.HasConversion(
d => JsonConvert.SerializeObject(d, Formatting.None),
s => JsonConvert.DeserializeObject<Dictionary<string, object>>(s)
)
.HasColumnName(nameof(IHasExtraProperties.ExtraProperties));
} }
public static void TryConfigureExtraProperties(this EntityTypeBuilder b)
{
//TODO: Max length?
if (b.Metadata.ClrType.IsAssignableTo<IHasExtraProperties>())
{
b.Property<Dictionary<string, object>>(nameof(IHasExtraProperties.ExtraProperties))
.HasConversion(
d => JsonConvert.SerializeObject(d, Formatting.None),
s => JsonConvert.DeserializeObject<Dictionary<string, object>>(s)
)
.HasColumnName(nameof(IHasExtraProperties.ExtraProperties));
}
}
//TODO: Others like ConfigureConcurrencyStamp/TryConfigureConcurrencyStamp and ConfigureExtraProperties/TryConfigureExtraProperties
public static void ConfigureSoftDelete<T>(this EntityTypeBuilder<T> b) public static void ConfigureSoftDelete<T>(this EntityTypeBuilder<T> b)
where T : class, ISoftDelete where T : class, ISoftDelete
{ {

Loading…
Cancel
Save