2016-06-28 79 views
0

我得到了一个错误,它是如此伤脑筋......我添加了一个局部类,我的项目,并把SaveChangeExeptionEntities它的名字......对象不包含定义“的SaveChanges”

我得到这个错误:

object does not contain a definition for "SaveChanges"

这里是代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data.Entity.Validation; 
using System.ComponentModel; 

namespace WindowsFormsApplication6 
{ 
    public partial class SaveChangeExeptionEntities 
    { 
     public override int SaveChanges() 
     { 
      try 
      { 
       return base.SaveChanges(); 
      } 
      catch (DbEntityValidationException ex) 
      { 
       // Retrieve the error messages as a list of strings. 
       var errorMessages = ex.EntityValidationErrors 
         .SelectMany(x => x.ValidationErrors) 
         .Select(x => x.ErrorMessage); 

       // Join the list to a single string. 
       var fullErrorMessage = string.Join("; ", errorMessages); 

       // Combine the original exception message with the new one. 
       var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage); 

       // Throw a new DbEntityValidationException with the improved exception message. 
       throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors); 
      } 
     } 
    } 
} 

请帮助我!我要疯了:(

+0

那么在另一个'SaveChangeExeptionEntities'部分类声明吗?你期望这个班来源于什么?也许这只是一个错字,而你的其他类正确地命名为'SaveChangeExceptionEntities'? (注意异常中的c) –

+0

@ Jon-Skeet我有一个类,它的名字是“BuyForm.cs”..在这个类中,我有我的主代码和一个实体conncetor到数据库表..我必须处理一个对SaveChange对象的豁免...我将这个exeption添加到一个部分类...我得到了这个错误...我是C#中的新手,我之前在Java上工作过... – Mohammadreza

+0

如果你是C#的新手,我建议从简单的事情开始 - 你是否对这个部分类有另一个“部分”,或者你是否从头开始创建这个名称还不清楚。 –

回答

0

您有没有从nothing..you继承的部分类不能做base.SaveChanges();,因为你没有一个基础

这里的部分的一些信息: https://msdn.microsoft.com/en-us/library/wa80x488(v=vs.110).aspx

这里基本通话(你可以看到继承) https://msdn.microsoft.com/it-it/library/hfw7t1ce.aspx

局部类的例子:

public partial class CoOrds 
{ 
    private int x; 
    private int y; 

    public CoOrds(int x, int y) 
    { 
     this.x = x; 
     this.y = y; 
    } 
} 

public partial class CoOrds 
{ 
    public void PrintCoOrds() 
    { 
     Console.WriteLine("CoOrds: {0},{1}", x, y); 
    } 

} 

class TestCoOrds 
{ 
    static void Main() 
    { 
     CoOrds myCoOrds = new CoOrds(10, 15); 
     myCoOrds.PrintCoOrds(); 

     // Keep the console window open in debug mode. 
     Console.WriteLine("Press any key to exit."); 
     Console.ReadKey(); 
    } 
} 

你可以看到对象myCoOrds是用在部分的第一部分中写入的构造函数实现的并且使用在部分类的第二部分中写入的方法...希望它有助于更​​好地理解

+0

我可以从我的主类继承吗? – Mohammadreza

+0

(看我的编辑),然后阅读一些文档是的,如果你有一个主类有一个名为SaveChanges的方法,你可以声明你的类如下: public class SaveChangeExeptionEntities:MainClass 然后调用base.SaveChanges – Lorenzo

+0

这段代码如果有另一个具有相应基类的相同部分类的另一个声明,那就没问题了。 –

0

这里的基地指的是System.Windows.Forms.Form,并且你正在继承。表格没有任何SaveChanges调用,EF有。您只需在Try Catch块中结束保存更改调用即可。

而您在这里使用部分类困惑。

你可以做这样的事情也

public class ExtendedClass : BaseEFClassForMyEntity 
{ 
    public override int SaveChanges() 
    { 
     try 
     { 
      return base.SaveChanges(); 

     } 
     catch (exception ex) 
     { 
     } 
    } 
} 

现在创建的ExtendedClass实例,并做到这一点

0

看来你正在使用实体框架!你必须在你的DbContext类中编写这个方法。

public partial class ApplicationDbContext : DbContext 
{ 
    public override int SaveChanges() 
    { 
     try 
     { 
      return base.SaveChanges(); 
     } 
     catch (DbEntityValidationException ex) 
     { 
      // Retrieve the error messages as a list of strings. 
      var errorMessages = ex.EntityValidationErrors 
        .SelectMany(x => x.ValidationErrors) 
        .Select(x => x.ErrorMessage); 

      // Join the list to a single string. 
      var fullErrorMessage = string.Join("; ", errorMessages); 

      // Combine the original exception message with the new one. 
      var exceptionMessage = string.Concat(ex.Message, " The validation errors are: ", fullErrorMessage); 

      // Throw a new DbEntityValidationException with the improved exception message. 
      throw new DbEntityValidationException(exceptionMessage, ex.EntityValidationErrors); 
     } 
    } 

}