public static void SaveData(Schema s, String MemoryDatabaseFile, RelationVal Value, Firefly.Mapping.Binary.BinarySerializer bs) { var rvs = new RelationValueSerializer(s); var Dir = FileNameHandling.GetFileDirectory(MemoryDatabaseFile); if (Dir != "" && !Directory.Exists(Dir)) { Directory.CreateDirectory(Dir); } using (var fs = Streams.CreateWritable(MemoryDatabaseFile)) { fs.WriteSimpleString("KRUSDATA", 8); fs.WriteUInt64(s.Hash()); var SchemaLengthPosition = fs.Position; fs.WriteInt64(0); var SchemaPosition = fs.Position; bs.Write(fs, s); var SchemaLength = fs.Position - SchemaPosition; var DataLengthPosition = fs.Position; fs.WriteInt64(0); var DataPosition = fs.Position; rvs.Write(fs, Value); var DataLength = fs.Position - DataPosition; fs.Position = SchemaLengthPosition; fs.WriteInt64(SchemaLength); fs.Position = DataLengthPosition; fs.WriteInt64(DataLength); } }
public static void ExportSqlServer(Schema s, String ConnectionString, String DatabaseName, String MemoryDatabaseFile) { if (DatabaseName == "") { throw new InvalidOperationException("数据库名称没有指定。"); } var bs = Niveum.ObjectSchema.BinarySerializerWithString.Create(); var cf = GetConnectionFactory(DatabaseType.SqlServer); var TableInfo = TableOperations.GetTableInfo(s); var EntityMetas = TableInfo.EntityMetas; var EnumUnderlyingTypes = TableInfo.EnumUnderlyingTypes; var Value = new RelationVal { Tables = new List <TableVal>() }; using (var c = cf(ConnectionString)) { c.Open(); c.ChangeDatabase(DatabaseName); using (var b = c.BeginTransaction()) { try { foreach (var t in EntityMetas) { var Table = TableOperations.ExportTable(EntityMetas, EnumUnderlyingTypes, c, b, t.Value.Name, DatabaseType.SqlServer); Value.Tables.Add(Table); } } finally { b.Rollback(); } } } SaveData(s, MemoryDatabaseFile, Value, bs); }
public static Dictionary <String, TableVal> GetTableDictionary(Schema s, Dictionary <String, EntityDef> EntityMetas, RelationVal Value) { var Tables = new Dictionary <String, TableVal>(StringComparer.OrdinalIgnoreCase); var k = 0; foreach (var t in s.Types) { if (t.OnEntity) { Tables.Add(t.Entity.Name, Value.Tables[k]); k += 1; } } var NotExists = Tables.Keys.Except(EntityMetas.Keys).ToList(); if (NotExists.Count > 0) { throw new InvalidOperationException("TableUnknown: " + String.Join(" ", NotExists)); } return(Tables); }