本文整理汇总了C#中Marten.Schema.DocumentMapping类的典型用法代码示例。如果您正苦于以下问题:C# DocumentMapping类的具体用法?C# DocumentMapping怎么用?C# DocumentMapping使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
DocumentMapping类属于Marten.Schema命名空间,在下文中一共展示了DocumentMapping类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: generating_code_and_sql_for_hierarchy_smoke_Tests_on_other_database_schema
public generating_code_and_sql_for_hierarchy_smoke_Tests_on_other_database_schema()
{
theHierarchy = DocumentMapping.For<Squad>("other");
theHierarchy.AddSubClass(typeof(BasketballTeam));
theHierarchy.AddSubClass(typeof(BaseballTeam));
theHierarchy.AddSubClass(typeof(FootballTeam));
}
示例2: SubClassMapping
public SubClassMapping(Type documentType, DocumentMapping parent, string alias = null)
{
DocumentType = documentType;
_inner = new DocumentMapping(documentType);
_parent = parent;
Alias = alias ?? documentType.GetTypeName().Replace(".", "_").SplitCamelCase().Replace(" ", "_").ToLowerInvariant();
}
示例3: GenerateDocumentStorageCode
public static string GenerateDocumentStorageCode(DocumentMapping[] mappings)
{
var writer = new SourceWriter();
// TODO -- get rid of the magic strings
var namespaces = new List<string> {"System", "Marten", "Marten.Schema", "Marten.Linq", "Marten.Util", "Npgsql", "Remotion.Linq"};
namespaces.AddRange(mappings.Select(x => x.DocumentType.Namespace));
namespaces.Distinct().OrderBy(x => x).Each(x => writer.WriteLine($"using {x};"));
writer.BlankLine();
writer.StartNamespace("Marten.GeneratedCode");
mappings.Each(x =>
{
x.GenerateDocumentStorage(writer);
writer.BlankLine();
writer.BlankLine();
});
writer.FinishBlock();
var code = writer.Code();
return code;
}
示例4: generating_code_and_sql_for_hierarchy_smoke_Tests
public generating_code_and_sql_for_hierarchy_smoke_Tests()
{
theHierarchy = DocumentMapping.For<Squad>();
theHierarchy.AddSubClass(typeof (BasketballTeam));
theHierarchy.AddSubClass(typeof (BaseballTeam));
theHierarchy.AddSubClass(typeof (FootballTeam));
}
示例5: CreateSchema
public void CreateSchema(IDocumentSchema schema, DocumentMapping mapping)
{
var writer= new StringWriter();
mapping.WriteSchemaObjects(schema, writer);
_runner.Execute(writer.ToString());
}
示例6: ParseWhereFragment
public IWhereFragment ParseWhereFragment(DocumentMapping mapping, Expression expression)
{
if (expression is BinaryExpression)
{
return GetWhereFragment(mapping, expression.As<BinaryExpression>());
}
if (expression.NodeType == ExpressionType.Call)
{
return GetMethodCall(mapping, expression.As<MethodCallExpression>());
}
if (expression is MemberExpression && expression.Type == typeof (bool))
{
var locator = JsonLocator(mapping, expression.As<MemberExpression>());
return new WhereFragment("{0} = True".ToFormat(locator), true);
}
if (expression.NodeType == ExpressionType.Not)
{
return GetNotWhereFragment(mapping, expression.As<UnaryExpression>().Operand);
}
if (expression is SubQueryExpression)
{
return GetWhereFragment(mapping, expression.As<SubQueryExpression>());
}
throw new NotSupportedException();
}
示例7: ComputedIndex
public ComputedIndex(DocumentMapping mapping, MemberInfo[] members)
{
_members = members;
var field = mapping.FieldFor(members);
_locator = field.SqlLocator.Replace("d.", "");
_table = mapping.Table;
}
示例8: Build
public static IEnumerable<IDocumentStorage> Build(IDocumentSchema schema, DocumentMapping[] mappings)
{
var code = GenerateDocumentStorageCode(mappings);
var generator = new AssemblyGenerator();
generator.ReferenceAssembly(Assembly.GetExecutingAssembly());
generator.ReferenceAssemblyContainingType<NpgsqlConnection>();
generator.ReferenceAssemblyContainingType<QueryModel>();
generator.ReferenceAssemblyContainingType<DbCommand>();
generator.ReferenceAssemblyContainingType<Component>();
mappings.Select(x => x.DocumentType.Assembly).Distinct().Each(assem => generator.ReferenceAssembly(assem));
var assembly = generator.Generate(code);
return assembly
.GetExportedTypes()
.Where(x => x.IsConcreteTypeOf<IDocumentStorage>())
.Select(x =>
{
var docType =
x.FindInterfaceThatCloses(typeof (IdAssignment<>)).GetGenericArguments().Single();
var mapping = mappings.Single(m => m.DocumentType == docType);
var arguments = mapping.IdStrategy.ToArguments().Select(arg => arg.GetValue(schema)).ToArray();
var ctor = x.GetConstructors().Single();
return ctor.Invoke(arguments).As<IDocumentStorage>();
});
}
示例9: Build
public static IEnumerable<IDocumentStorage> Build(IDocumentSchema schema, DocumentMapping[] mappings)
{
// Generate the actual source code
var code = GenerateDocumentStorageCode(mappings);
var generator = new AssemblyGenerator();
// Tell the generator which other assemblies that it should be referencing
// for the compilation
generator.ReferenceAssembly(Assembly.GetExecutingAssembly());
generator.ReferenceAssemblyContainingType<NpgsqlConnection>();
generator.ReferenceAssemblyContainingType<QueryModel>();
generator.ReferenceAssemblyContainingType<DbCommand>();
generator.ReferenceAssemblyContainingType<Component>();
generator.ReferenceAssemblyContainingType<DbDataReader>();
mappings.Select(x => x.DocumentType.Assembly).Distinct().Each(assem => generator.ReferenceAssembly(assem));
// build the new assembly -- this will blow up if there are any
// compilation errors with the list of errors and the actual code
var assembly = generator.Generate(code);
return assembly
.GetExportedTypes()
.Where(x => x.IsConcreteTypeOf<IDocumentStorage>())
.Select(x => BuildStorageObject(schema, mappings, x));
}
示例10: UpsertFunction
public UpsertFunction(DocumentMapping mapping)
{
if (mapping == null) throw new ArgumentNullException(nameof(mapping));
_functionName = mapping.UpsertFunction;
_tableName = mapping.Table;
_primaryKeyConstraintName = "pk_" + mapping.Table.Name;
var idType = mapping.IdMember.GetMemberType();
var pgIdType = TypeMappings.GetPgType(idType);
Arguments.Add(new UpsertArgument
{
Arg = "docId",
PostgresType = pgIdType,
Column = "id",
Members = new[] {mapping.IdMember}
});
Arguments.Add(new UpsertArgument
{
Arg = "doc",
PostgresType = "JSONB",
DbType = NpgsqlDbType.Jsonb,
Column = "data",
BulkInsertPattern = "writer.Write(serializer.ToJson(x), NpgsqlDbType.Jsonb);",
BatchUpdatePattern = "*"
});
}
示例11: Modify
public override void Modify(DocumentMapping mapping, MemberInfo member)
{
var fkDefinition = mapping.AddForeignKey(member.Name, _referenceType);
mapping.AddIndex(fkDefinition.ColumnName);
}
示例12: SingleFieldSelectorTests
public SingleFieldSelectorTests()
{
theMapping = DocumentMapping.For<User>();
var prop = ReflectionHelper.GetProperty<User>(x => x.FirstName);
theSelector = new SingleFieldSelector<string>(theMapping, new MemberInfo[] {prop});
}
示例13: SchemaDiff
public SchemaDiff(IDocumentSchema schema, SchemaObjects existing, DocumentMapping mapping)
{
if (existing.HasNone())
{
AllMissing = true;
}
else
{
var expectedTable = mapping.ToTable(schema);
TableDiff = new TableDiff(expectedTable, existing.Table);
// TODO -- drop obsolete indices?
mapping.Indexes.Each(index =>
{
if (existing.ActualIndices.ContainsKey(index.IndexName))
{
var actualIndex = existing.ActualIndices[index.IndexName];
if (!index.Matches(actualIndex))
{
IndexChanges.Add($"drop index {expectedTable.Table.Schema}.{index.IndexName};{index.ToDDL()}");
}
}
else
{
IndexChanges.Add(index.ToDDL());
}
});
}
_existing = existing;
_mapping = mapping;
_schema = schema;
}
示例14: BuildStorageObject
public static IDocumentStorage BuildStorageObject(IDocumentSchema schema, Type storageType, DocumentMapping mapping)
{
var arguments = mapping.ToArguments().Select(arg => arg.GetValue(schema)).ToArray();
var ctor = storageType.GetConstructors().Single();
return ctor.Invoke(arguments).As<IDocumentStorage>();
}
示例15: storage_arguments_adds_hierarchy_argument_with_subclasses
public void storage_arguments_adds_hierarchy_argument_with_subclasses()
{
var mapping = new DocumentMapping(typeof(Squad), new StoreOptions());
mapping.AddSubClass(typeof(FootballTeam));
mapping.ToArguments().OfType<HierarchyArgument>()
.Single().Mapping.ShouldBeSameAs(mapping);
}