我有以下数据模型:
我正在编写一个需要支持添加新报告的WCF服务:
public bool CreateNewReport(Report report)
{
MyEntities context = new MyEntities();
context.AddToReports(Report);
context.SaveChanges();
}
因此,我的方法获取一个在客户端上生成的报表对象,并通过数据上下文将其添加到数据库中。 (所有成员都包含在DataContract中)
我的问题是关于导航属性。
UserId
ReportEntity
字段
感谢。
答案 0 :(得分:1)
如果导入数据库,则生成导航属性(图片中的属性)和外部ID属性(例如,您在报告类中具有User和UserID属性)。这样,您可以在客户端中设置UserID并将其发送到服务器并使用AddToReports
添加...如果您发送整个用户对象,则必须将其附加到实体上下文,否则将创建用户再一次......
附加引用的用户:(但最好只通过id发送用户)
public bool CreateNewReport(Report report)
{
using (MyEntities context = new MyEntities())
{
context.AddToReports(Report);
context.Users.Attach(report.User);
context.SaveChanges();
}
}
更改用户的报告:
public bool ChangeUserToNewReport(int userid, Report newReport)
{
using (MyEntities context = new MyEntities())
{
var user = context.Users.Single(u => u.ID = userid);
user.Report = newReport;
context.SaveChanges();
}
}
对于现有报告:
public bool ChangeUserReport(int userid, Report existingReport)
{
using (MyEntities context = new MyEntities())
{
context.Reports.Attach(existingReport);
var user = context.Users.Single(u => u.ID = userid);
user.Report = existingReport;
context.SaveChanges();
}
}
这是您的模型应该如何显示的示例。双击关联线以打开对话框。您可以看到Person
和PersonID
属性相同。如果您像这样创建模型,VS应该生成正确的SQL。