我可以在下面的代码填写两个表吗? 地址,Cod,Cost应填写tbl_Reciver。 但是Lname,Name,Tell应该填写Tbl_Sender。 我能在这里填两张表吗?
public static bool InsertInTables(string Address, string Cod, int? cost,string Lname, string Name, string Tell )
{
MyContext db = new MyContext();
try
{
//Can i fill Tbl_Sender like tbl_Reciver here
var tbl1 = new tbl_Reciver
{
id = MaxIdInTbl (),
Address_s = Address,
Cod_s = Cod,
Cost_s = cost,
//i wanna fill below fields in tbl_Sender
// Lname_s = Lname,
// Name_s = Name,
//Tell_s = Tell,
};
//is it possible i fill two tables ?
db.tbl_Reciver.Add(tbl1);
db.SaveChanges();
return true;
}
catch
{
return false;
}
}
答案 0 :(得分:0)
SaveChanges
当它看到两者都是新的并且它们是相关的时,会为你做所有这些。它还使用模型的映射来确定哪个是从属实体并且需要外键。使用此信息,它以正确的顺序执行数据库插入。
注意:如果使用DbFirst方法为存在的数据库创建上下文,它也会自动生成模型。
但代码首先接近,如果你有任何约束,你应该使用覆盖跟随方法定义模型。
protected virtual void OnModelCreating(
DbModelBuilder modelBuilder
)
然后您可以使用相同的事务保存您的实体。如果任何故障自动回滚事务本身。
Using(MyContext db = new MyContext())
{
try
{
var tbl1 = new tbl_Reciver
{
id = MaxIdInTbl (),
Address_s = Address,
Cod_s = Cod,
Cost_s = cost,
};
long maxId=MaxIdInTbl();
var tbl2= db.tbl_Sender.FirstOrDefault(x => x.id == maxId);
tbl2.Lname_s = Lname;
tbl2.Name_s = Name;
tbl2.Tell_s = Tell;
db.Refresh(RefreshMode.StoreWins,tbl2);
db.tbl_Reciver.Add(tbl1);
db.SaveChanges();
return true;
}
catch
{
return false;
}
}