Как вы уже видели, вы не можете перейти в BusClient
в AddToClients
. Вам придется создать Client
из BusClient
в вашем Insert
методе, скопировав свойства, что довольно уродливо:
public void Insert()
{
using(MyBIEntities db = new MyBIEntities())
{
Client client = new Client();
client.CityId = this.CityId;
client.Name = this.Name;
client.RegisterDate = this.RegisterDate;
db.AddToClients(client);
db.SaveChanges();
}
}
Переосмыслите дизайн. Я не вижу выгоды от получения класса (BusClient
) от сущности (Client
). Если вы не можете изменить класс Client
, вы можете создать любой метод расширения ...
public static class Extensions
{
public static bool Validate(this Client client)
{
// Run validation rules on client object
}
}
... или отдельный класс для вашей проверки:
public class Validator
{
public bool Validate(Client client)
{
// Run validation rules on client object
}
}
Я бы тоже дважды подумал об этом отдельном Insert
методе. Хотя это может работать в вашем примере, это может вызвать проблемы (или, по крайней мере, стать бесполезными), как только вам придется манипулировать более сложным графом объектов. В таком случае вам понадобится один единственный ObjectContext для всей операции. Вы больше не можете работать с отдельным ObjectContext для каждого INSERT, UPDATE или DELETE и т. Д.
Итак, я бы порекомендовал удалить операции с БД из вашего специального класса и поместить это в основную процедуру. Все это может выглядеть так:
try
{
using(MyBIEntities db = new MyBIEntities())
{
Client client = new Client();
client.CityId = int.Parse(ddlCity.SelectedValue());
client.Name = txtName.Text;
client.RegisterDate = Convert.ToDateTime("txtDate.Text");
if (client.Validate())
// works with the extension method, or with the Validator use:
// Validator validator = new Validator();
// if (validator.Validate(client))
{
db.AddToClients(client);
db.SaveChanges();
}
}
}
catch (Exception ex)
{
//Catching errors
}
В этом примере класс BusClient
больше не существует.