public class PersionRepository : IPersonRepository
{
private string _connectionString;
private string _findByIdSql = "select * from people where PersonId=@PersonId";
private string _insertSql = "insert people (FristName,LastName,PersonId,Version) values (@FirstName,@LastName,@PersonId,@Version)";
private string _updateSql = "update people SET FirstName=@FirstName,LastName=@LastName,Version=@Version+1 where PersonId=@PersonId AND Version=@Version";
public PersionRepository(string connectionString)
{
_connectionString = connectionString;
}
public void Add(Person person)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
{
SqlCommand command = connection.CreateCommand();
command.CommandText = _insertSql;
command.Parameters.Add(new SqlParameter("@PersonId", person.Id));
command.Parameters.Add(new SqlParameter("@Version", person.Version));
command.Parameters.Add(new SqlParameter("@FirstName", person.FirstName));
command.Parameters.Add(new SqlParameter("@LastName", person.LastName));
connection.Open();
command.ExecuteNonQuery();
}
}
public void Save(Person person)
{
int numberOfRecordsAffected = 0;
using (SqlConnection connection = new SqlConnection(_connectionString))
{
SqlCommand command = connection.CreateCommand();
command.CommandText = _updateSql;
command.Parameters.Add(new SqlParameter("@PersonId", person.Id));
command.Parameters.Add(new SqlParameter("@Version", person.Version));
command.Parameters.Add(new SqlParameter("@FirstName", person.FirstName));
command.Parameters.Add(new SqlParameter("@LastName", person.LastName));
connection.Open();
numberOfRecordsAffected = command.ExecuteNonQuery();
}
if (numberOfRecordsAffected == 0)
throw new ApplicationException("No changes....");
else
{
person.Version++;
}
}
public Person FindBy(Guid Id)
{
Person person = default(Person);
using (SqlConnection connection = new SqlConnection(_connectionString))
{
SqlCommand command = connection.CreateCommand();
command.CommandText = _findByIdSql;
command.Parameters.Add(new SqlParameter("@PersonId", Id));
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.Read())
{
person = new Person
{
FirstName = reader["FristName"].ToString(),
LastName = reader["LastName"].ToString(),
Id = new Guid(reader["PersonId"].ToString()),
Version = int.Parse(reader["Version"].ToString())
};
}
}
}
return person;
}
}