//"Insert" method to directly save objects with composite keys public virtual int Add(T type, bool validateEntity = false, string endPoint = "", string transID = "") { //var compositeKeys = typeof(T).GetProperties().Any(p => p.GetCustomAttributes(typeof(CompositeKeyColumnAttribute), true).Length != 0); //var identityPropertyName = typeof(T).GetProperties().SingleOrDefault(t => t.Name.ToLower().StartsWith("id")) == null ? "ID" // : typeof(T).GetProperties().SingleOrDefault(t => t.Name.ToLower().StartsWith("id")).Name; //var id = Convert.ToInt32(typeof(T).GetProperty(identityPropertyName).GetValue(type, null)); //var v = id > 0 && !compositeKeys ? _repository.Single<T>(id) : null; if (validateEntity) { var validator = new Validation.EntityValidator <T>(); var vr = validator.Validate(type); if (vr.HasError) { throw new Exception("Validation: " + vr.ErrorList); } } try { if (!string.IsNullOrEmpty(endPoint) && !string.IsNullOrEmpty(transID) && typeof(T).Name != "Audit") { Auditor.Add <T>(new Auditor.AuditAction { Endpoint = endPoint, Operation = "insert", TransactionID = transID, }, type, type, "id", "created"); } var result = _repository.Insert(type); return((result == null || result.Equals(0)) ? 0 : Convert.ToInt32(result)); } catch (SqlException sx) { throw new Exception(new ValidationExceptionParser(TableName, sx).ValidationErrorMessage, sx); } finally { _repository.Dispose(); } }