多个方法的外键约束
本文关键字:约束 方法 | 更新日期: 2023-09-27 18:33:09
我有两个单独的表表A和表B,每个表的数据都是从不同的页面单独插入的。
现在我想插入一个页面中的所有数据,在表 A 中添加外键 (fk_BId(。
问题是如何从我从应用程序中插入的数据中fk_BId提供新创建的 Id,为了使创建的 AId 等于创建的 BId,如下所示:
表 A
AId = 1
fk_BId = 2
项目 1 = A
项目 2 = B
表 B
BId = 2
项目 3 = D
项目 4 = E
我用于单独添加数据的编码如下所示:
周转基金
public void AddDataA(Obj obj)
{
using (var result = new _Db())
{
var t = new A
{
item1 = obj.item1,
item2 = obj.item2
};
result.A.Add(t);
result.SaveChanges();
}
}
public void AddDataB(Obj obj)
{
using (var result = new _Db())
{
var t = new B
{
item1 = obj.item1,
item2 = obj.item2
};
result.B.Add(t);
result.SaveChanges();
}
}
可湿性工作基金会
private void methodA()
{
_Service service = new _Service();
service.AddDataA(new Obj
{
item1 = txtitem1.Text,
item2 = txtitem2.Text
});
}
private void methodB()
{
_Service service = new _Service();
service.AddDataB(new Obj
{
item1 = txtitem1.Text,
item2 = txtitem2.Text
});
}
我只是问我的问题,如何将从一页表单插入到两个表中?
EF 支持你的方案。首先,让我们定义一个具有导航属性的模型:
public class A
{
public int Id { get; set; }
public int? Item1 { get; set; }
public int? Item2 { get; set; }
public virtual B B { get; set; }
}
public partial class B
{
public int Id { get; set; }
public int? Item1 { get; set; }
public int? Item2 { get; set; }
public virtual IList<A> A { get; set; } = new List<A>();
}
Db 上下文类将如下所示:
public partial class MyModel: DbContext
{
public MyModel(): base("name=ConnectionStringName") {}
public virtual DbSet<A> A { get; set; }
public virtual DbSet<B> B { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<B>().HasMany(e => e.A).WithOptional(e => e.B).Map(e => e.MapKey("fk_Bld"));
}
}
需要 OnModelCreate 方法中的代码来告知 EF fk_Bkld是外键。现在我们可以将对象插入数据库:
using (var ctx = new MyModel())
{
var a1 = new A { Item1 = 1, Item2 = 2 };
var a2 = new A { Item1 = 2, Item2 = 3 };
var b = new B { Item1 = 4, Item2 = 5, A = new List<A> { a1, a2 } };
ctx.B.Add(b);
ctx.SaveChanges();
}
现在,您需要在 WCF 方法中使用类似的代码,并从应用程序中调用它。