我已经在这方面工作了几天而且已经筋疲力尽了。我已经搜索了stackoverflow,但我尝试过的一切都没有用。
我在本地计算机上运行它并使用SQL Management Studio 2016作为我的SQL数据库。
我试图解决这个问题的方法是:
netstat -ab
来检查端口,它显示我运行的端口是在SqlServer下的0.0.0.0:63591
但不是在127.0.0.1
(Localhost)下应该是这样。如果你能帮助我那会很棒
您确定您的数据库实例正在运行吗?在SQL Server的配置管理器中检查它以及默认端口。
之后,与您的Web配置的连接字符串中的端口号进行比较。
<connectionStrings>
<clear/>
<add name="xxxxx" connectionString="metadata=res://*/xxxx.csdl|res://*/xxx.ssdl|res://*/xxx.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\xxxxxx;Initial Catalog=xx;Persist Security Info=True;User ID=yyy;Password=yyyy;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"/></connectionStrings>
因此,在我调试代码后,我发现了解决方案中的问题。
1 - **此问题的第一个原因是**“为属性检测到自引用循环”,因为您正在尝试使用公共IQueryable GetFoods()直接序列化Entity Framework对象。由于Food有MealFood而且MealFood有参考食物,它不能序列化。
解决方案是在您的Global.asax中添加此代码GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
你的方法将是这样的:
protected void Application_Start(){ GlobalConfiguration.Configure(WebApiConfig.Register); GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; }
在这里,我们需要为JSON.Net序列化程序定义全局设置以忽略循环引用。
2 - **第二个问题是**“实体或复杂类型'模型'不能在LINQ to Entities查询中构造”。
要解决此问题,您可以像这样创建食物类的伪类:
public class PseudoFood
{
public int FoodID { get; set; }
public string FoodName { get; set; }
public int Calories { get; set; }
public string Notes { get; set; }
}
在用这种方法查询你的数据库之后。
public IQueryable<PseudoFood> GetFoods()
{
return (from a in db.Foods
orderby a.FoodName descending
select new PseudoFood()
{
FoodName = a.FoodName,
FoodID = a.FoodID,
Calories = a.Calories,
Notes = a.Notes
}
).AsQueryable();
}
返回PseudoFood“IQueryable”并最终检索您的记录。