效率低,用实体框架更新记录

时间:2018-01-19 23:43:33

标签: c# entity-framework

美好的一天,

我正在使用实体框架来更新数据库中的字段。我想要更新的对象中有另一个对象,在这种情况下会有一对多的关系。

 public class Rental
{
    public int Id { get; set; }

    [Required]
    public Customer Customer { get; set; }

    [Required]
    public Movie Movie { get; set; }

    public string SomeValue{get;set;}

    public DateTime DateRented { get; set; }

    public DateTime? DateReturned { get; set; }
}

电影实体:

public class Movie
{
    public int Id { get; set; }
    public string Name{get;set;}       
    public byte NumberAvailable { get; set; }
}

当我更新租赁表时

using (var db = new MyContextDB())
{
var result = db.rental.SingleOrDefault(r => id == ID);
if (result != null)
{
    result.SomeValue = "Some new value";
    db.SaveChanges();
}
}

我收到一条错误消息,指出需要电影和客户。我可以看到结果不包括Movie对象,也没有Customer对象(都是null)。 有没有什么方法可以帮助我更新Rental,而不必像这样使用Include?

var result = db.rental.Include(i=>i.Movie)
.Include(i=>i.Customer).SingleOrDefault(r => id == ID);

或再进行两次查询以带来客户和电影并将其分配为

result.Customer=Customer;`result.Movie=movie;`

1 个答案:

答案 0 :(得分:0)

您需要在上下文对象上将Configuration.ValidateOnSaveEnabled设置为false。

using (var db = new MyContextDB())
{

    var result = db.rental.SingleOrDefault(r => id == ID);
    if (result != null)
    {
        result.SomeValue = "Some new value";

        db.Configuration.ValidateOnSaveEnabled = false; // <-- set flag to false
        db.SaveChanges();
    }
}