我在LinqToSql中创建了一个有2个子类的低音类。我需要为每个子类自定义更新方法分配不同的存储过程。这样做很好,但是我收到“无效对象名称'xxx'”的错误。
e.g。
DataClasses1DataContext dc = new DataClasses1DataContext();
Class2 c2 = new Class2() { ID = 1, Name = "test", Type = "s" };
dc.Class1s.InsertOnSubmit(c2);
dc.SubmitChanges();
... Class2继承Class1,Class2拥有自己的自定义INSERT方法(这就是我想要它执行的方法)。
感谢。
解决方案:布莱恩的答案给了我以后的意思。这是我添加到设计师背后的类的代码:
partial class DataClasses1DataContext
{
partial void InsertClass1(Class1 instance)
{
instance.Insert(this);
}
}
partial class Class1
{
public abstract void Insert(DataClasses1DataContext dataContext);
}
partial class Class2
{
public override void Insert(DataClasses1DataContext dataContext)
{
dataContext.InsertSP(((System.Nullable<int>)(ID)), Name);
}
}
partial class Class3
{
public override void Insert(DataClasses1DataContext dataContext)
{
dataContext.InsertSP2((System.Nullable<int>)(ID), Name);
}
}
使用设计器拖动InsertSP和InsertSP2存储过程,以省去必须手动调用sp的麻烦。
对于这一个人的所有信贷
答案 0 :(得分:2)
如果这是LINQ to SQL设计者生成的内容:
partial void InsertClass1(Class1 instance);
并且您在partial
类中有一个实现:
partial void InsertClass1(Class1 instance)
{
...call stored procedure...
}
您可以在Class1
中使用虚拟方法来表示该操作:
protected virtual void Insert(Class1 instance)
{
...call stored procedure...
}
并从Class1
的{{1}}方法调用它:
partial
并在partial void InsertClass1(Class1 instance)
{
Insert(instance);
}
中覆盖它:
Class2
唯一的问题是你必须在重写方法中强制转换为protected override void Insert(Class1 instance)
{
...call different stored procedure...
}
,但它总会成功。