我有一个页面,它将相关数据收集到一系列输入字段中。
当用户点击提交时,我想一次性将数据插入两个不同的数据库表中。即我想从第一个插入中获取主键,然后将其用于第二个插入操作。
我希望一次性完成这一切,但我不确定使用MVC中的模型/实体做到这一点的最佳方法。
答案 0 :(得分:1)
您使用的是LINQ还是其他一些ORM?通常,这些将支持添加相关实体并自动处理外键关系的功能。通常,我对LINQtoSQL的处理方式如下:
var modelA = new ModelA();
var modelB = new ModelB();
UpdateModel( modelA, new string[] { "aProp1", "aProp2", ... } );
UpdateModel( modelB, new string[] { "bProp1", "bProp2", ... } );
using (var context = new DBContext())
{
modelA.ModelB = modelB;
context.ModelA.InsertOnSubmit( modelA );
context.SubmitChanges();
}
这将自动处理modelA和modelB的插入,并确保在modelB的外键中正确设置了modelA的主键。
如果你手工完成,你可能需要在事务内部分三步完成,首先插入modelA,从插入中获取密钥并更新modelB,然后插入带有数据的modelB。
编辑:我已经使用UpdateModel展示了这一点,但您也可以使用模型绑定与方法的参数。对于多个模型,这可能有点棘手,要求您有单独的前缀,并使用bind属性指定哪个表单参数与哪个模型一起使用。