3

I'm having problems updating a property of a class when the class contains virtual properties. Here is my code

 public class Policy
            {
                [Key]
                [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
                public long id { get; set; }

                [UIHint("Company"), Required]
                public virtual Company company { get; set; }

                [UIHint("Productor"), Required]
                public virtual Productor productor { get; set; }

                [MaxLength(1000)]
                public string comments { get; set; }
            }

        public class Company
        {
            [Key]
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            public long id { get; set; }

            [MaxLength(100)]
            public string name { get; set; }

        }

    //Then Productor class is the same as company but with another name

     public static int updateComment(long id, string comments)
            {
                MemberPolicies mp = new MemberPolicies();

                Policy p = mp.Policies.Single(o => o.id == id);
                p.comments = comments;

                int afectedRecords = -1;
                try
                {
                    afectedRecords = mp.SaveChanges();
                }
                catch (DbEntityValidationException dbEx)
                {
                    foreach (var validationErrors in dbEx.EntityValidationErrors)
                    {
                        foreach (var validationError in validationErrors.ValidationErrors)
                        {
                            Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                        }
                    }
                }
                return afectedRecords;
            }

The properties which are causing the validation errors are company and company, but I only want to update the property comment.

Some help is appreciate.

Thanks

roncansan
  • 2,310
  • 6
  • 27
  • 34
  • 1
    possible duplicate of [Modifying a property on an entity in Entity Framework causes validation error](http://stackoverflow.com/questions/8784005/modifying-a-property-on-an-entity-in-entity-framework-causes-validation-error) – Eranga Jun 29 '12 at 15:08

1 Answers1

1

EF does not lazy load your virtual properties when you try to save your entity (damn it). You can do either of the following.

Use Include:

Policy p = mp.Policies
    .Include(p => p.company)
    .Include(p => p.productor).Single(o => o.id == id);
p.comments = comments;

Or use Load:

Policy p = mp.Policies.Single(o => o.id == id);
p.comments = comments;
mp.Entry(p).Reference(p => p.company).Load();
mp.Entry(p).Reference(p => p.productor).Load();

Or better you can write more elegant code as explained here.

Community
  • 1
  • 1
Ε Г И І И О
  • 11,199
  • 1
  • 48
  • 63