Как я могу сохранить объект в первый раз, который требует, чтобы другой ранее существующий объект был присоединен к нему - PullRequest
1 голос
/ 28 марта 2009

Мне нужно сохранить объект компании в базе данных как новый объект. Для этого мне нужно связать сущность CompanyType с сущностью Company. Я не могу спасти компанию без этого. Должен ли я присоединить вновь созданную компанию к контексту, а затем прикрепить сущность типа компании к компании и сохранить результаты? Этот код работает ... но просто не чувствует себя хорошо.

public RepositoryStatus SaveCompany(Company company, CompanyType companyType)
    {
        RepositoryStatus rs = new RepositoryStatus();
        try
        {
            using (RanchBuddyEntities dc = new Connection().GetContext())
            {
                if (company.CompanyID > 0)
                {
                    company.UpdateDate = DateTime.Now;
                    Company original = dc.CompanySet.Where(c => c.CompanyID == company.CompanyID).FirstOrDefault();
                    dc.ApplyPropertyChanges("CompanySet", company);
                    dc.Attach(companyType);
                    company.CompanyTypesReference.Attach(companyType);
                }
                else
                {
                    company.CreateDate = DateTime.Now;
                    company.UpdateDate = DateTime.Now;
                    dc.AddToCompanySet(company);
                    dc.Attach(companyType);
                    company.CompanyTypesReference.Value = companyType;
                }
                dc.SaveChanges();
            }
            rs.SetObject(company);
            rs.StatusType = Status.StatusTypes.Success;
        }
        catch (Exception e)
        {
            rs.SetObject(company);
            rs.StatusType = Status.StatusTypes.Failure;
            rs.AddMessage(e.Message + Environment.NewLine + e.StackTrace);
        }

        return rs;
    }

CompanyType был присоединен к другому контексту и отделен, поэтому он передается здесь. Будет ли лучше передать CompanyTypeID и запросить связанный объект внутри того же оператора using?

Я не могу смириться с тем, что мне нужно было предпринять так много шагов, чтобы привести EF в чувство, когда LINQ to SQL было так просто! Тем не менее - EF кажется проще, чем NHibernate!

1 Ответ

1 голос
/ 28 марта 2009

Я делаю это так:

Company company = new Company();
company.CreateDate = DateTime.Now;
company.UpdateDate = DateTime.Now;
company.CompanyType = companyType;
RanchBuddyEntities.AddToCompanies(company);
RanchBuddyEntities.SaveChanges();
...