.net 如何使类从DAL表继承属性并插入
我试图使这个业务类从DAL类型(客户机)继承属性 客户端是一个表 这是总线类,从表客户机.net 如何使类从DAL表继承属性并插入,.net,entity-framework,c#-4.0,.net-4.0,entity-framework-4,.net,Entity Framework,C# 4.0,.net 4.0,Entity Framework 4,我试图使这个业务类从DAL类型(客户机)继承属性 客户端是一个表 这是总线类,从表客户机 public class BusClient : Client { public void Insert() { using(MyBIEntities db = new MyBIEntities()) { db.AddToClients(this); //Here's the pr
public class BusClient : Client
{
public void Insert()
{
using(MyBIEntities db = new MyBIEntities())
{
db.AddToClients(this); //Here's the problem (don't know what to pass)
db.SaveChanges();
}
}
public bool Validate()
{
//Validation Rules goes here.
return true;
}
}
以下是网络表单调用:
try
{
BusClient client = new BusClient();
//Filling properties from Client (table) in the BusClient object all OK.
client.CityId = int.Parse(ddlCity.SelectedValue());
client.Name = txtName.Text;
client.RegisterDate = Convert.ToDateTime("txtDate.Text");
if (client.Validate())
{
client.Insert();
}
}
catch (Exception ex)
{
//Catching errors
}
问题很明显,我无法传递要插入的总线客户机类型。。但是我已经填充了所有这些属性,对于Validate()
和Insert()
方法,使用它们的最佳方式是什么
另一件事:在尝试验证()之前,避免表单上发生类型异常/错误(服务器端)的最佳做法是什么 正如您已经看到的,您无法将
总线客户端
传递到添加客户端
。您必须在Insert
方法中从BusClient
创建Client
,方法是复制非常难看的属性:
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();
}
}
重新思考设计。我看不到从实体(Client
)派生类(BusClient
)的好处。如果无法更改客户机
类,则可以创建扩展方法
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
因此,我建议从您的特殊类中删除DB操作,并将其放入主例程中。整个事情可能会是这样的:
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
类不再存在。MyBIEntities
可能是一个IDisposable
实现,因此您应该在插入方法中使用块将这些语句包装在中。感谢您指出它。已完成此BusClient
类的目的是什么,为什么不将这两个方法Insert
和Validate
直接放入Client
类中(这将解决插入正确类型的问题)?Client不是一个类。。它是DAL层的一种类型,但客户机是实体数据模型中的实体,不是吗?(因为您使用的是db.addToClient
)。如果它不是一门课,它是什么?接口还是结构?但据我所知,这不可能是EDM中的实体。或者,您的意思是不能修改并向该类添加方法?