/// <summary> /// Specify the primary key for this entity /// </summary> public void Id <TPrimaryKey>( Expression <Func <T, TPrimaryKey> > memberExpression, EntityMappingOptions options) { // Unsupported options: Length, Unique, Nullable // Index, CustomSqlType, CascadeDelete, WithSerialization options = options ?? new EntityMappingOptions(); idMember = ((MemberExpression)memberExpression.Body).Member; MapActions.Add(m => { var memberMap = m.MapIdMember(memberExpression); if (!string.IsNullOrEmpty(options.Column)) { memberMap = memberMap.SetElementName(options.Column); } }); }
/// <summary> /// Create a member mapping<br/> /// 创建成员映射<br/> /// </summary> public void Map <TMember>( Expression <Func <T, TMember> > memberExpression, EntityMappingOptions options = null) { // Unsupported options: Length, CustomSqlType, CascadeDelete, WithSerialization options = options ?? new EntityMappingOptions(); ordinaryMembers.Add(((MemberExpression)memberExpression.Body).Member); MapActions.Add(m => { var memberMap = m.MapMember(memberExpression); if (!string.IsNullOrEmpty(options.Column)) { memberMap = memberMap.SetElementName(options.Column); } if (options.Nullable == true) { memberMap.SetIsRequired(true); } else if (options.Nullable == false) { memberMap.SetIsRequired(false); } }); if (options.Unique == true || !string.IsNullOrEmpty(options.Index)) { // Create indexes CollectionActions.Add(c => { var keys = new IndexKeysDefinitionBuilder <T>().Ascending( Expression.Lambda <Func <T, object> >( Expression.Convert(memberExpression.Body, typeof(object)), memberExpression.Parameters)); var indexOptions = new CreateIndexOptions() { Background = true, Unique = options.Unique, Sparse = !options.Unique // ignore null member on indexing }; var model = new CreateIndexModel <T>(keys, indexOptions); c.Indexes.CreateOne(model); }); } }
public void NotifyAction(MapActions action) { this.queuedActions.Enqueue(action); }