/// <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);
         }
     });
 }
Example #2
0
 /// <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);
         });
     }
 }
Example #3
0
 public void NotifyAction(MapActions action)
 {
     this.queuedActions.Enqueue(action);
 }