我正在尝试使用存储库模式来使用Entity Framework保存实体。我不清楚如何保存导航属性(如下面的帐户)。任何人都可以对此有所了解。特别是如何将AccountId从MVC控制器一直设置到保存它的存储库。
谢谢!
---示例代码---
public void SavePerson(Person person)
{
if (person != null)
{
using (xxxxxxEntities bbEntities = new xxxxxxEntities())
{
//see if it's in the db
Person cPerson;
ObjectQuery<Person> persons = bbEntities.Person;
cPerson = (from p in persons
where p.PersonId == person.PersonId
select p).FirstOrDefault() ?? new Person();
//synch it
cPerson.Account.AccountId = person.Account.AccountId; //<=== ????
cPerson.Active = person.Active;
cPerson.BirthDay = person.BirthDay;
cPerson.BirthMonth = person.BirthMonth;
cPerson.BirthYear = person.BirthYear;
cPerson.CellPhone = person.CellPhone;
cPerson.CreatedBy = person.CreatedBy;
cPerson.CScore = person.CScore;
Etc....
答案 0 :(得分:3)
我认为你可能会以艰难的方式解决这个问题。存储库模式上有很多帖子,最适合MVC的方法是获取项目,然后使用表单更新它,然后保存它。您正在做的是将项目传递到您的存储库,再次获取它,然后使用该对象更新它。
但那不是你问过的问题;
cPerson.Account = (from a in Account
where a.AccountId.Equals(person.Account.AccountId)
select a).FirstOrDefault();
您需要将Account对象设置为您尝试引用的帐户的实例,如下所示。您可以并且可能应该将此代码提取到该帐户的单独存储库中,只需确保它们共享相同的实体上下文。