代码之家  ›  专栏  ›  技术社区  ›  HAdes

如何将自定义的插入/更新/删除方法设置为LinqToSQL中继承的子classes?

  •  0
  • HAdes  · 技术社区  · 16 年前

    我在linqtosql中创建了一个bass类,它有两个子类。我需要为每个子类自定义更新方法分配不同的存储过程。这样做很好,但我得到一个错误“无效的对象名'xxx'”。

    例如

    DataClasses1DataContext dc = new DataClasses1DataContext();
    Class2 c2 = new Class2() { ID = 1, Name = "test", Type = "s" };
    dc.Class1s.InsertOnSubmit(c2);
    dc.SubmitChanges();
    

    …Class2继承了Class1,Class2有自己的自定义插入方法(这是我希望它执行的方法)。

    谢谢。

    解决方案 布赖恩的回答给了我想要的。下面是我添加到设计器后面的类中的代码:

    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的麻烦。

    这件事都归功于布赖恩

    1 回复  |  直到 16 年前
        1
  •  2
  •   Bryan Watts    16 年前

    如果这是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...
    }
    

    从…开始 第一类 部分的 方法:

    partial void InsertClass1(Class1 instance)
    {
        Insert(instance);
    }
    

    并在 Class2 :

    protected override void Insert(Class1 instance)
    {
        ...call different stored procedure...
    }
    

    唯一的问题是你必须投出 第二类 在重写的方法中,但它总是成功的。