收到错误:
EntitySet'User'未在EntityContainer'festDBEntities'中定义。近简单标识符,第1行,第46列。
我的应用代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using FestCloud.festDBService;
namespace FestCloud
{
public partial class MainPage : PhoneApplicationPage
{
private Service1Client _serviceClient;
// Constructor
public MainPage()
{
InitializeComponent();
_serviceClient = new Service1Client();
_serviceClient.LoginUserCompleted += new EventHandler<LoginUserCompletedEventArgs>(_serviceClient_LoginUserCompleted);
}
void _serviceClient_LoginUserCompleted(object sender, LoginUserCompletedEventArgs e)
{
if ((e.Error == null) && (e.Result != null))
{
MessageBox.Show("Welcome " + e.Result + " !");
}
else
{
MessageBox.Show("Could not log in. Please check user name/password and try again.");
}
}
private void logInButton_Click(object sender, RoutedEventArgs e)
{
_serviceClient.LoginUserAsync(userNameTextBox.Text, passwordTextBox.Text);
}
private void newAccountButton_Click(object sender, RoutedEventArgs e)
{
NavigationService.Navigate(new Uri("/Register.xaml", UriKind.Relative));
}
}
}
和我的服务代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Data.Objects;
namespace CloudServiceRole
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
public class Service1 : IService1
{
public void AddUser(string userName, string password)
{
using (var context = new festDBEntities())
{
context.AddToUsers(new User()
{
UserName = userName,
Password = password,
});
context.SaveChanges();
}
}
public string LoginUser(string username, string password)
{
string query = @"SELECT value User.UserName FROM festDBEntities.User AS User WHERE User.UserName = @username AND User.Password = @password";
ObjectParameter[] parameters = new ObjectParameter[2];
parameters[0] = new ObjectParameter("username", username);
parameters[1] = new ObjectParameter("password", password);
using (var context = new festDBEntities())
{
ObjectQuery<string> results = context.CreateQuery<string>(query, parameters);
foreach (string result in results)
{
if (result != null)
{
return result;
}
}
}
return null; ;
}
}
}
我的IService.cs文件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
namespace CloudServiceRole
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IService1
{
[OperationContract]
void AddUser(string userName, string password);
[OperationContract]
string LoginUser(string userName, string password);
// TODO: Add your service operations here
}
}
我的数据库包含UserId(int)-PK,UserName(nvarchar),密码(nvarchar) 在我完成基础工作之后添加其他人。 关于什么导致错误或我的代码的一般想法? 非常感谢,MH
答案 0 :(得分:0)
这听起来不像手机拨打它的问题,你试过用其他东西调用吗?您是否尝试过调用不带参数的Web服务来查看它是否有效?
您可能需要查看此示例以帮助您入门:
另外,我建议使用WCF REST并返回JSON,如:
答案 1 :(得分:0)
这看起来像是一个实体框架问题。最可能的原因是festDBEntities类不包含名为User的属性(也许它被命名为Users?)。请先检查您的对象模型。根据我的经验,您还可以编写LINQ查询而不是对象查询。 LINQ查询是强类型的,可以帮助我们在编译时删除这些错误。
此外,还请将标签添加到标签中,以便更多实体框架专家参与此主题以提供进一步的建议。
最诚挚的问候,
徐明。