如何在实体框架中保存导航属性

时间:2009-01-29 07:27:24

标签: asp.net-mvc entity-framework

我正在尝试使用存储库模式来使用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....

1 个答案:

答案 0 :(得分:3)

我认为你可能会以艰难的方式解决这个问题。存储库模式上有很多帖子,最适合MVC的方法是获取项目,然后使用表单更新它,然后保存它。您正在做的是将项目传递到您的存储库,再次获取它,然后使用该对象更新它。

但那不是你问过的问题;

cPerson.Account = (from a in Account
                   where a.AccountId.Equals(person.Account.AccountId)
                   select a).FirstOrDefault();

您需要将Account对象设置为您尝试引用的帐户的实例,如下所示。您可以并且可能应该将此代码提取到该帐户的单独存储库中,只需确保它们共享相同的实体上下文。