我正在尝试使用数据库在新项目中设置数据库,但是仍然出现此问题:
An unhandled exception of type 'System.StackOverflowException' occurred in System.Core.dll
我使用Web api文件夹创建了一个空的4.5项目。然后我添加了3个类库:BO(业务对象),BLL(业务逻辑)和DAL(数据访问层)。
首先,主应用程序具有带有这样的连接字符串的web.config
<connectionStrings>
<add name="ConnString" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Quantico;Integrated Security=True" providerName=".NET Framework Data Provider for SQL Server"/>
</connectionStrings>
在我的BO图书馆中,我有2个班级和性别
基础
public abstract class Base
{
public int ID { get; set; }
public Boolean isValid { get; set; }
public DateTime createdOn { get; set; }
public int createdID { get; set; }
/*public Person createdPerson { get; set; }*/
public DateTime updatedOn { get; set; }
public int updatedID { get; set; }
/*public Person updatedPerson { get; set; }*/
}
性别
public class Gender : Base
{
public string Description { get; set; }
}
在我的dal中,我有2个班级GenderDAL和Appcontext
AppContext is like this
public class AppContext : DbContext
{
public AppContext() : base("ConnString")
{
}
public DbSet<Gender> Gender { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Gender>().ToTable("Gender");
modelBuilder.Entity<Gender>().HasKey(x => x.ID);
modelBuilder.Entity<Gender>().Property(x => x.Description).HasMaxLength(255);
modelBuilder.Entity<Gender>().Property(x => x.Description).IsRequired();
modelBuilder.Entity<Gender>().Property(x => x.createdID).IsRequired();
modelBuilder.Entity<Gender>().Property(x => x.createdOn).IsRequired();
}
}
GenderDAL如下
public class GenderDAL : AppContext
{
private AppContext db = null;
public GenderDAL()
{
db = new GenderDAL();
}
public IEnumerable<Gender> GetGenders()
{
return db.Gender.ToList<Gender>();
}
}
问题发生在base(connstring),我的控制器是这样的
public class GenderController : ApiController
{
private GenderBLL db = null;
[HttpGet]
public IEnumerable<Gender> Genders()
{
db = new GenderBLL();
return db.GetGenders();
}
}
我的业务逻辑在这个阶段还不多,但是像这样
public class GenderBLL
{
private GenderDAL db = null;
#region constructor
public GenderBLL()
{
db = new GenderDAL();
}
#endregion
public IEnumerable<Gender> GetGenders()
{
return db.GetGenders();
}
}
如果我查看服务器浏览器,则可以在数据连接下看到我已连接到数据库,但是不存在表。我认为这是我的问题,我不确定如何填充它,或者我错过了哪一步
最佳答案
您的问题与连接字符串无关。查看您的GenderDAL
类:
public class GenderDAL : AppContext
{
private AppContext db = null;
public GenderDAL()
{
db = new GenderDAL();
}
//..
您的
GenderDAL
类继承自AppContext
,并且在构造函数内部,您正在创建new GenderDAL()
(它递归地创建另一个嵌套的GenderDAL
,依此类推,无限地进行)。这将导致无限递归,直到堆栈已满并且框架抛出StackOverflowException
。我没有看到从
AppContext
继承DAL对象的任何正当理由,强烈建议您删除此类继承。