多个方法的外键约束

时间:2016-02-04 12:45:19

标签: c# .net wpf entity-framework wcf

我有两个单独的表表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

我单独添加数据的编码看起来像这样:

WCF

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();
    }
}

WPF

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
        });     
}

我问我的问题只是如何从一页表单插入两个表?

1 个答案:

答案 0 :(得分:0)

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"));
    }
}

OnModelCreating 方法中的代码需要告诉EF fk_Bkld 是外键。现在我们可以将对象插入DB:

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方法中使用类似的代码并从您的应用程序中调用它。