public static void Main()
var customerData = "Customer,1,Ford";
var personData = "Person,675,Henry,Ford";
var customerImporter = new ImportData<CompanyMaster>();
customerImporter.ImportDataFromFile(customerData);
var personImporter = new ImportData<PersonMaster>();
personImporter.ImportDataFromFile(personData);
public class GenericRepository<TBase>
public void Insert(TBase entity)
public class ImportData<TBase>
GenericRepository<TBase> _genericRepository;
CsvConverter<TBase> _converter;
public void ImportDataFromFile(string data)
_genericRepository = new GenericRepository<TBase>();
_converter = new CsvConverter<TBase>();
var entity = _converter.ConvertTo(data);
Console.WriteLine(entity);
public class CsvConverter<TBase> where TBase: EntityBase{
public TBase ConvertTo(string someString)
if (someString.StartsWith("Customer"))
return GetCompany(someString);
else return GetPerson(someString);
private CompanyMaster GetCompany(string companyString){
return new CompanyMaster();
private PersonMaster GetPerson(string companyString){
return new PersonMaster();
public abstract class EntityBase
public int Id { get; set; }
public DateTime CreatedDate { get; set; }
public class CompanyMaster : EntityBase
public string CompanyName { get; set; }
public class PersonMaster : EntityBase
public string FirstName { get; set; }
public string LastName { get; set; }