前言:我正在编写一套程序,从共享驱动器中检索文件,将它们转换为数据库中的几个表,使用户能够对数据库中的记录执行CRUD操作(通过MVC4 ASP.NET Web应用程序),然后将数据库中的记录重新组装成相同的文件格式并将文件FTP返回到主机。这些文件表示从大型机VSAM文件中提取的数据,我无法控制格式。还有其他项目会出现类似的徒劳 - 检索,翻译,编辑,汇编和上传大型机提取文件。一切都很完整,但我编写汇编文件的代码的方式不可重用,并且只针对当前项目域模型中的Entity对象。
Oppurtunity:由于其他即将推出的项目的文件中的数据格式非常相似,我希望有一些可恢复的代码来重新组合这些文件。
数据:以下代表一些模拟文件数据。文件中的每一行文本(我现在称之为记录)可以是特定长度(在这种情况下为80字节)。记录可以是带有星号前缀的注释。未注释的记录可以有4种不同的类型。
A' Line'属于'序列' (序列号 - 仅对表有唯一性)。 A'序列'属于'表' (表键 - 文件唯一)。 A'表'有一个类型,表按文件中的类型和键排序。
该行按顺序排列如下:
序列预告片按顺序排列如下:
表格预告片按顺序排列如下:
“表格预告片”按顺序排列如下:
表格预告片发生在文件中每个有序的表格集之后。
************************************************************************ * TABLE 00001 - SOME MORE COMMENTS * 04/04/11 CREATED TABLE ************************************************************************ * COMMENT FOR SEQ 1 720PFT0000100000001000001PROI00011E1037-E1039 720PFT0000100000001000002PGMI000016 720PFT0000100000001000003RTN 00004 NAC 720PFT0000100000001099999000000003 * COMMENT FOR SEQ 2 720PFT0000100000003000001PROI00011E1037-E1039 720PFT0000100000003000002CLSI000037,8 720PFT0000100000003000003MEDE000010 720PFT0000100000003000004RTN 00004 NAC 720PFT0000100000003099999000000004 720PFT0000199999999999999000000002 720PFT9999999999999999999000000001
代码:以下代表域模型中的实体(为简洁起见,我排除了相关实体):
[Table("Line",Schema="Pft")]
public class Line
{
#region Entity Properties
[Key]
public int LineId { get; set; }
[Required]
public short LineNumber { get; set; }
[StringLength(255)]
public string Comment { get; set; }
[Required]
public int SequenceId { get; set; }
[Required]
public int IncludeExcludeId { get; set; }
[Required]
public int QualifierId { get; set; }
[Required]
[ForeignKey("PlanFlexTable")]
public int PlanFlexTableId { get; set; }
#endregion
}
[Table("Sequence", Schema="Pft")]
public class Sequence
{
#region Entity Properties
[Key]
public int SequenceId { get; set; }
[Required]
public int SequenceNumber { get; set; }
[StringLength(511)]
public string Comment { get; set; }
#endregion
}
[Table("PlanFlexTable", Schema = "Pft")]
public class PlanFlexTable
{
#region Entity Properties
[Key]
public int PlanFlexTableId { get; set; }
[Required]
public int StatusId { get; set; }
[StringLength(5, MinimumLength = 5)]
[Required]
public string Key { get; set; }
[StringLength(255)]
[Required(AllowEmptyStrings = true)]
public string Title { get; set; }
[Display(Name="Table Comment")]
public string Comment { get; set; }
public int PlanFlexTableTypeId { get; set; }
public int UpdateHistoryId { get; set; }
[StringLength(3)]
[Required]
public string PlanId { get; set; }
#endregion
}
摘要:我正在寻找可重用的生成文件的建议,就像上面提到的那样。目前我有一个类接受PlanFlexTable实体的IEnumerable并迭代它组装要上传的文件。我已经考虑过使用反射创建一些属性来放置实体来定义文件的构建方式;但是,我真的很感激有关其他可能性的更多反馈和想法。
谢谢!
答案 0 :(得分:0)
你想动态生成代码....试试T4?您可以使用模式基础(键控等)为您的实体类创建一个基本模板,并根据VSAM文件(为此您拥有可重用的解析器...)填充该类的其余部分。 / p>
鉴于(生成的)实体类和数据库表,您的CRUD工具的其余部分可能是可重用的吗?