多个方法的外键约束

本文关键字:约束 方法 | 更新日期: 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 方法中使用类似的代码,并从应用程序中调用它。