C# 使用Linq到Sql更新控制器中的模型

C# 使用Linq到Sql更新控制器中的模型,c#,asp.net-mvc,model-view-controller,C#,Asp.net Mvc,Model View Controller,我想用Linq到sql更新这些模型,但我不能。模型里有很多道具。所以我不想一个接一个地匹配。我如何更新我的模型 [HttpPost] public ActionResult Update(MyModal1 m1, MyModel2 m2) { MyModel1 willBeUpdatedm1= ctx.MyModal1.SingleOrDefault(x => x.id == m1.id); MyMo

我想用Linq到sql更新这些模型,但我不能。模型里有很多道具。所以我不想一个接一个地匹配。我如何更新我的模型

        [HttpPost]
        public ActionResult Update(MyModal1 m1, MyModel2 m2)
    {
        MyModel1 willBeUpdatedm1= ctx.MyModal1.SingleOrDefault(x => x.id == 
        m1.id);
        MyModel2 willBeUpdatedm2= ctx.MyModal2.SingleOrDefault(x => x.id == 
        m2.id);

        return RedirectToAction("Update", new {m1.id });
    }

您可以通过使用反射迭代属性来编写自己的实现(例如,konut.GetType().GetProperties(),然后迭代所有属性并为Db模型设置它们),也可以使用一些第三方工具为您进行映射。例如AutoMapper()或valueinjector()。虽然我认为ValueInjector一开始就比较简单,但它们都做得很好

这里是使用ValueInjector时的示例:

[HttpPost]
public ActionResult KonutGuncelle(Konut konut, KonutOzellik ko)
{
    KonutOzellik willBeUpdatedko = ctx.KonutOzellik.SingleOrDefault(x => x.KonutOzellikID == konut.KonutOzellikID);
    willBeUpdatedko.InjectFrom(ko); // New code with ValueInjecter

    Konut willBeUpdatedkonut = ctx.Konut.SingleOrDefault(x => x.id == konut.id);
    willBeUpdatedko.InjectFrom(konut); // New code with ValueInjecter

    ctx.SaveChanges(); // Must save changes?

    return RedirectToAction("KonutGuncelle", new { konut.id });
}

或者您可以通过使用
ctx.Entry(konut.State=EntittyState.Modified
来使用实体框架已经提供的内容,并且忘记第三方库和反射