You add a Hatch in a block definition (BlockTableRecord) exactly the same way as you do it in the model space (BlockTableRecord)
From this reply:
private static ObjectId CreateBlockWithHatch(Database db, string blockName)
{
using (var tr = db.TransactionManager.StartTransaction())
{
var bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
BlockTableRecord block;
if (bt.Has(blockName)) return bt[blockName];
tr.GetObject(db.BlockTableId, OpenMode.ForWrite);
block = new BlockTableRecord();
block.Name = blockName;
var blockId = bt.Add(block);
tr.AddNewlyCreatedDBObject(block, true);
var pline = new Polyline(4) { Closed = true, Layer = "0" };
pline.Layer = "0";
pline.AddVertexAt(0, new Point2d(-12.0, -12.0), 0.0, 0.0, 0.0);
pline.AddVertexAt(0, new Point2d(12.0, -12.0), 0.0, 0.0, 0.0);
pline.AddVertexAt(0, new Point2d(12.0, 12.0), 0.0, 0.0, 0.0);
pline.AddVertexAt(0, new Point2d(-12.0, 12.0), 0.0, 0.0, 0.0);
block.AppendEntity(pline);
tr.AddNewlyCreatedDBObject(pline, true);
var circle = new Circle() { Center = Point3d.Origin, Radius = 8.0, Layer = "0" };
block.AppendEntity(circle);
tr.AddNewlyCreatedDBObject(circle, true);
var ids = new ObjectIdCollection(new[] { circle.ObjectId });
var hatch = new Hatch() { Layer = "0", PatternScale = 0.5, ColorIndex = 1 };
hatch.SetHatchPattern(HatchPatternType.PreDefined, "ANSI31");
block.AppendEntity(hatch);
tr.AddNewlyCreatedDBObject(hatch, true);
hatch.Associative = true;
hatch.AppendLoop(HatchLoopTypes.Default, ids);
hatch.EvaluateHatch(true);
tr.Commit();
return blockId;
}
}