我有两个单独的表表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
});
}
我问我的问题只是如何从一页表单插入两个表?
答案 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方法中使用类似的代码并从您的应用程序中调用它。