Skip to content

Commit 6cb1725

Browse files
author
shuxinqin
committed
提升 fluentmapping 使用体验
1 parent d88922a commit 6cb1725

8 files changed

+60
-41
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
namespace Chloe.Entity
22
{
3-
public class CollectionPropertyBuilder<TProperty> : ICollectionPropertyBuilder<TProperty>
3+
public class CollectionPropertyBuilder<TProperty, TEntity> : ICollectionPropertyBuilder<TProperty, TEntity>
44
{
5-
public CollectionPropertyBuilder(CollectionProperty property)
5+
public CollectionPropertyBuilder(CollectionProperty property, IEntityTypeBuilder<TEntity> declaringBuilder)
66
{
77
this.Property = property;
8+
this.DeclaringBuilder = declaringBuilder;
89
}
10+
11+
IEntityTypeBuilder ICollectionPropertyBuilder.DeclaringBuilder { get { return this.DeclaringBuilder; } }
12+
public IEntityTypeBuilder<TEntity> DeclaringBuilder { get; }
13+
914
public CollectionProperty Property { get; private set; }
1015
}
1116
}

src/Chloe/Entity/ComplexPropertyBuilder.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ namespace Chloe.Entity
55
{
66
public class ComplexPropertyBuilder<TProperty, TEntity> : IComplexPropertyBuilder<TProperty, TEntity>
77
{
8-
public ComplexPropertyBuilder(ComplexProperty property)
8+
public ComplexPropertyBuilder(ComplexProperty property, IEntityTypeBuilder<TEntity> declaringBuilder)
99
{
1010
this.Property = property;
11+
this.DeclaringBuilder = declaringBuilder;
1112
}
13+
14+
IEntityTypeBuilder IComplexPropertyBuilder.DeclaringBuilder { get { return this.DeclaringBuilder; } }
15+
public IEntityTypeBuilder<TEntity> DeclaringBuilder { get; }
1216
public ComplexProperty Property { get; private set; }
1317

1418
public IComplexPropertyBuilder<TProperty, TEntity> WithForeignKey(string foreignKey)

src/Chloe/Entity/EntityTypeBuilder.cs

+7-7
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ public IEntityTypeBuilder HasQueryFilter(LambdaExpression filter)
7676
return this.HasQueryFilter((Expression<Func<TEntity, bool>>)filter);
7777
}
7878

79-
public IPrimitivePropertyBuilder<TProperty> Property<TProperty>(Expression<Func<TEntity, TProperty>> property)
79+
public IPrimitivePropertyBuilder<TProperty, TEntity> Property<TProperty>(Expression<Func<TEntity, TProperty>> property)
8080
{
8181
string propertyName = PropertyNameExtractor.Extract(property);
82-
IPrimitivePropertyBuilder<TProperty> propertyBuilder = this.Property(propertyName) as IPrimitivePropertyBuilder<TProperty>;
82+
IPrimitivePropertyBuilder<TProperty, TEntity> propertyBuilder = this.Property(propertyName) as IPrimitivePropertyBuilder<TProperty, TEntity>;
8383
return propertyBuilder;
8484
}
8585
public IPrimitivePropertyBuilder Property(string property)
@@ -89,7 +89,7 @@ public IPrimitivePropertyBuilder Property(string property)
8989
if (entityProperty == null)
9090
throw new ArgumentException($"The mapping property list doesn't contain property named '{property}'.");
9191

92-
IPrimitivePropertyBuilder propertyBuilder = Activator.CreateInstance(typeof(PrimitivePropertyBuilder<>).MakeGenericType(entityProperty.Property.PropertyType), entityProperty) as IPrimitivePropertyBuilder;
92+
IPrimitivePropertyBuilder propertyBuilder = Activator.CreateInstance(typeof(PrimitivePropertyBuilder<,>).MakeGenericType(entityProperty.Property.PropertyType, this.EntityType.Type), entityProperty, this) as IPrimitivePropertyBuilder;
9393
return propertyBuilder;
9494
}
9595

@@ -110,15 +110,15 @@ public IComplexPropertyBuilder HasOne(string property)
110110
this.EntityType.ComplexProperties.Add(complexProperty);
111111
}
112112

113-
IComplexPropertyBuilder propertyBuilder = Activator.CreateInstance(typeof(ComplexPropertyBuilder<,>).MakeGenericType(complexProperty.Property.PropertyType, typeof(TEntity)), complexProperty) as IComplexPropertyBuilder;
113+
IComplexPropertyBuilder propertyBuilder = Activator.CreateInstance(typeof(ComplexPropertyBuilder<,>).MakeGenericType(complexProperty.Property.PropertyType, this.EntityType.Type), complexProperty, this) as IComplexPropertyBuilder;
114114

115115
return propertyBuilder;
116116
}
117117

118-
public ICollectionPropertyBuilder<TProperty> HasMany<TProperty>(Expression<Func<TEntity, TProperty>> property)
118+
public ICollectionPropertyBuilder<TProperty, TEntity> HasMany<TProperty>(Expression<Func<TEntity, TProperty>> property)
119119
{
120120
string propertyName = PropertyNameExtractor.Extract(property);
121-
ICollectionPropertyBuilder<TProperty> propertyBuilder = this.HasMany(propertyName) as ICollectionPropertyBuilder<TProperty>;
121+
ICollectionPropertyBuilder<TProperty, TEntity> propertyBuilder = this.HasMany(propertyName) as ICollectionPropertyBuilder<TProperty, TEntity>;
122122
return propertyBuilder;
123123
}
124124
public ICollectionPropertyBuilder HasMany(string property)
@@ -132,7 +132,7 @@ public ICollectionPropertyBuilder HasMany(string property)
132132
this.EntityType.CollectionProperties.Add(collectionProperty);
133133
}
134134

135-
ICollectionPropertyBuilder propertyBuilder = Activator.CreateInstance(typeof(CollectionPropertyBuilder<>).MakeGenericType(collectionProperty.Property.PropertyType), collectionProperty) as ICollectionPropertyBuilder;
135+
ICollectionPropertyBuilder propertyBuilder = Activator.CreateInstance(typeof(CollectionPropertyBuilder<,>).MakeGenericType(collectionProperty.Property.PropertyType, this.EntityType.Type), collectionProperty, this) as ICollectionPropertyBuilder;
136136
return propertyBuilder;
137137
}
138138

src/Chloe/Entity/ICollectionPropertyBuilder.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22
{
33
public interface ICollectionPropertyBuilder
44
{
5+
IEntityTypeBuilder DeclaringBuilder { get; }
56
CollectionProperty Property { get; }
67
}
78

8-
public interface ICollectionPropertyBuilder<TProperty> : ICollectionPropertyBuilder
9+
public interface ICollectionPropertyBuilder<TProperty, TEntity> : ICollectionPropertyBuilder
910
{
10-
11+
new IEntityTypeBuilder<TEntity> DeclaringBuilder { get; }
1112
}
1213
}

src/Chloe/Entity/IComplexPropertyBuilder.cs

+2
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ namespace Chloe.Entity
55
{
66
public interface IComplexPropertyBuilder
77
{
8+
IEntityTypeBuilder DeclaringBuilder { get; }
89
ComplexProperty Property { get; }
910
IComplexPropertyBuilder WithForeignKey(string foreignKey);
1011
}
1112

1213
public interface IComplexPropertyBuilder<TProperty, TEntity> : IComplexPropertyBuilder
1314
{
15+
new IEntityTypeBuilder<TEntity> DeclaringBuilder { get; }
1416
new IComplexPropertyBuilder<TProperty, TEntity> WithForeignKey(string foreignKey);
1517
IComplexPropertyBuilder<TProperty, TEntity> WithForeignKey<TForeignKey>(Expression<Func<TEntity, TForeignKey>> foreignKey);
1618
}

src/Chloe/Entity/IEntityTypeBuilder.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ public interface IEntityTypeBuilder<TEntity> : IEntityTypeBuilder
2323
new IEntityTypeBuilder<TEntity> HasAnnotation(object value);
2424
IEntityTypeBuilder<TEntity> Ignore(Expression<Func<TEntity, object>> property);
2525
IEntityTypeBuilder<TEntity> HasQueryFilter(Expression<Func<TEntity, bool>> filter);
26-
IPrimitivePropertyBuilder<TProperty> Property<TProperty>(Expression<Func<TEntity, TProperty>> property);
26+
IPrimitivePropertyBuilder<TProperty, TEntity> Property<TProperty>(Expression<Func<TEntity, TProperty>> property);
2727
IComplexPropertyBuilder<TProperty, TEntity> HasOne<TProperty>(Expression<Func<TEntity, TProperty>> property);
28-
ICollectionPropertyBuilder<TProperty> HasMany<TProperty>(Expression<Func<TEntity, TProperty>> property);
28+
ICollectionPropertyBuilder<TProperty, TEntity> HasMany<TProperty>(Expression<Func<TEntity, TProperty>> property);
2929
}
3030
}

src/Chloe/Entity/IPrimitivePropertyBuilder.cs

+15-13
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ namespace Chloe.Entity
44
{
55
public interface IPrimitivePropertyBuilder
66
{
7+
IEntityTypeBuilder DeclaringBuilder { get; }
78
PrimitiveProperty Property { get; }
89
IPrimitivePropertyBuilder MapTo(string column);
910
IPrimitivePropertyBuilder HasAnnotation(object value);
@@ -18,24 +19,25 @@ public interface IPrimitivePropertyBuilder
1819
IPrimitivePropertyBuilder HasSequence(string name, string schema = null);
1920
IPrimitivePropertyBuilder UpdateIgnore(bool updateIgnore = true);
2021
}
21-
public interface IPrimitivePropertyBuilder<TProperty> : IPrimitivePropertyBuilder
22+
public interface IPrimitivePropertyBuilder<TProperty, TEntity> : IPrimitivePropertyBuilder
2223
{
23-
new IPrimitivePropertyBuilder<TProperty> MapTo(string column);
24-
new IPrimitivePropertyBuilder<TProperty> HasAnnotation(object value);
25-
new IPrimitivePropertyBuilder<TProperty> IsPrimaryKey(bool isPrimaryKey = true);
26-
new IPrimitivePropertyBuilder<TProperty> IsAutoIncrement(bool autoIncrement = true);
27-
new IPrimitivePropertyBuilder<TProperty> IsNullable(bool isNullable = true);
28-
new IPrimitivePropertyBuilder<TProperty> IsRowVersion(bool isRowVersion = true);
29-
new IPrimitivePropertyBuilder<TProperty> HasDbType(DbType dbType);
30-
new IPrimitivePropertyBuilder<TProperty> HasSize(int? size);
31-
new IPrimitivePropertyBuilder<TProperty> HasScale(byte? scale);
32-
new IPrimitivePropertyBuilder<TProperty> HasPrecision(byte? precision);
33-
new IPrimitivePropertyBuilder<TProperty> HasSequence(string name, string schema = null);
24+
new IEntityTypeBuilder<TEntity> DeclaringBuilder { get; }
25+
new IPrimitivePropertyBuilder<TProperty, TEntity> MapTo(string column);
26+
new IPrimitivePropertyBuilder<TProperty, TEntity> HasAnnotation(object value);
27+
new IPrimitivePropertyBuilder<TProperty, TEntity> IsPrimaryKey(bool isPrimaryKey = true);
28+
new IPrimitivePropertyBuilder<TProperty, TEntity> IsAutoIncrement(bool autoIncrement = true);
29+
new IPrimitivePropertyBuilder<TProperty, TEntity> IsNullable(bool isNullable = true);
30+
new IPrimitivePropertyBuilder<TProperty, TEntity> IsRowVersion(bool isRowVersion = true);
31+
new IPrimitivePropertyBuilder<TProperty, TEntity> HasDbType(DbType dbType);
32+
new IPrimitivePropertyBuilder<TProperty, TEntity> HasSize(int? size);
33+
new IPrimitivePropertyBuilder<TProperty, TEntity> HasScale(byte? scale);
34+
new IPrimitivePropertyBuilder<TProperty, TEntity> HasPrecision(byte? precision);
35+
new IPrimitivePropertyBuilder<TProperty, TEntity> HasSequence(string name, string schema = null);
3436
/// <summary>
3537
/// 更新忽略
3638
/// </summary>
3739
/// <param name="updateIgnore"></param>
3840
/// <returns></returns>
39-
new IPrimitivePropertyBuilder<TProperty> UpdateIgnore(bool updateIgnore = true);
41+
new IPrimitivePropertyBuilder<TProperty, TEntity> UpdateIgnore(bool updateIgnore = true);
4042
}
4143
}

src/Chloe/Entity/PrimitivePropertyBuilder.cs

+19-14
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,25 @@
33

44
namespace Chloe.Entity
55
{
6-
public class PrimitivePropertyBuilder<TProperty> : IPrimitivePropertyBuilder<TProperty>
6+
public class PrimitivePropertyBuilder<TProperty, TEntity> : IPrimitivePropertyBuilder<TProperty, TEntity>
77
{
8-
public PrimitivePropertyBuilder(PrimitiveProperty property)
8+
public PrimitivePropertyBuilder(PrimitiveProperty property, IEntityTypeBuilder<TEntity> declaringBuilder)
99
{
1010
this.Property = property;
11+
this.DeclaringBuilder = declaringBuilder;
1112
}
13+
14+
IEntityTypeBuilder IPrimitivePropertyBuilder.DeclaringBuilder { get { return this.DeclaringBuilder; } }
15+
public IEntityTypeBuilder<TEntity> DeclaringBuilder { get; }
16+
1217
public PrimitiveProperty Property { get; private set; }
1318

1419
IPrimitivePropertyBuilder AsNonGenericBuilder()
1520
{
1621
return this;
1722
}
1823

19-
public IPrimitivePropertyBuilder<TProperty> MapTo(string column)
24+
public IPrimitivePropertyBuilder<TProperty, TEntity> MapTo(string column)
2025
{
2126
this.AsNonGenericBuilder().MapTo(column);
2227
return this;
@@ -27,7 +32,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.MapTo(string column)
2732
return this;
2833
}
2934

30-
public IPrimitivePropertyBuilder<TProperty> HasAnnotation(object value)
35+
public IPrimitivePropertyBuilder<TProperty, TEntity> HasAnnotation(object value)
3136
{
3237
this.AsNonGenericBuilder().HasAnnotation(value);
3338
return this;
@@ -41,7 +46,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.HasAnnotation(object value)
4146
return this;
4247
}
4348

44-
public IPrimitivePropertyBuilder<TProperty> IsPrimaryKey(bool isPrimaryKey = true)
49+
public IPrimitivePropertyBuilder<TProperty, TEntity> IsPrimaryKey(bool isPrimaryKey = true)
4550
{
4651
this.AsNonGenericBuilder().IsPrimaryKey(isPrimaryKey);
4752
return this;
@@ -52,7 +57,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.IsPrimaryKey(bool isPrimaryK
5257
return this;
5358
}
5459

55-
public IPrimitivePropertyBuilder<TProperty> IsAutoIncrement(bool isAutoIncrement = true)
60+
public IPrimitivePropertyBuilder<TProperty, TEntity> IsAutoIncrement(bool isAutoIncrement = true)
5661
{
5762
this.AsNonGenericBuilder().IsAutoIncrement(isAutoIncrement);
5863
return this;
@@ -69,7 +74,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.IsAutoIncrement(bool isAutoI
6974
return this;
7075
}
7176

72-
public IPrimitivePropertyBuilder<TProperty> IsNullable(bool isNullable = true)
77+
public IPrimitivePropertyBuilder<TProperty, TEntity> IsNullable(bool isNullable = true)
7378
{
7479
this.AsNonGenericBuilder().IsNullable(isNullable);
7580
return this;
@@ -80,7 +85,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.IsNullable(bool isNullable)
8085
return this;
8186
}
8287

83-
public IPrimitivePropertyBuilder<TProperty> IsRowVersion(bool isRowVersion = true)
88+
public IPrimitivePropertyBuilder<TProperty, TEntity> IsRowVersion(bool isRowVersion = true)
8489
{
8590
this.AsNonGenericBuilder().IsRowVersion(isRowVersion);
8691
return this;
@@ -91,7 +96,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.IsRowVersion(bool isRowVersi
9196
return this;
9297
}
9398

94-
public IPrimitivePropertyBuilder<TProperty> HasDbType(DbType dbType)
99+
public IPrimitivePropertyBuilder<TProperty, TEntity> HasDbType(DbType dbType)
95100
{
96101
this.AsNonGenericBuilder().HasDbType(dbType);
97102
return this;
@@ -102,7 +107,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.HasDbType(DbType dbType)
102107
return this;
103108
}
104109

105-
public IPrimitivePropertyBuilder<TProperty> HasSize(int? size)
110+
public IPrimitivePropertyBuilder<TProperty, TEntity> HasSize(int? size)
106111
{
107112
this.AsNonGenericBuilder().HasSize(size);
108113
return this;
@@ -113,7 +118,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.HasSize(int? size)
113118
return this;
114119
}
115120

116-
public IPrimitivePropertyBuilder<TProperty> HasScale(byte? scale)
121+
public IPrimitivePropertyBuilder<TProperty, TEntity> HasScale(byte? scale)
117122
{
118123
this.AsNonGenericBuilder().HasScale(scale);
119124
return this;
@@ -124,7 +129,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.HasScale(byte? scale)
124129
return this;
125130
}
126131

127-
public IPrimitivePropertyBuilder<TProperty> HasPrecision(byte? precision)
132+
public IPrimitivePropertyBuilder<TProperty, TEntity> HasPrecision(byte? precision)
128133
{
129134
this.AsNonGenericBuilder().HasPrecision(precision);
130135
return this;
@@ -135,7 +140,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.HasPrecision(byte? precision
135140
return this;
136141
}
137142

138-
public IPrimitivePropertyBuilder<TProperty> HasSequence(string name, string schema)
143+
public IPrimitivePropertyBuilder<TProperty, TEntity> HasSequence(string name, string schema)
139144
{
140145
this.AsNonGenericBuilder().HasSequence(name, schema);
141146
return this;
@@ -152,7 +157,7 @@ IPrimitivePropertyBuilder IPrimitivePropertyBuilder.HasSequence(string name, str
152157
return this;
153158
}
154159

155-
public IPrimitivePropertyBuilder<TProperty> UpdateIgnore(bool updateIgnore = true)
160+
public IPrimitivePropertyBuilder<TProperty, TEntity> UpdateIgnore(bool updateIgnore = true)
156161
{
157162
this.AsNonGenericBuilder().UpdateIgnore(updateIgnore);
158163
return this;

0 commit comments

Comments
 (0)