【问题标题】:How can i insert into multiple tables using Linq?如何使用 Linq 插入多个表?
【发布时间】:2020-09-11 16:02:48
【问题描述】:

如何使用 Linq 将记录插入到多个表中?

我有三个相关的表ContactPhoneEmail,是否可以先创建联系人,然后再创建电话或电子邮件。由于电话和电子邮件使用 ContactID 作为外键

这是我的 linq 表达式:

 var Contact = Mapper.Map<Contact>(request.CreateContactInformation);
    Contact.CreatedBy = request.CreateContactInformation.CreatedBy;
    Contact.CreatedDate = SystemClock.UtcNow;
    Contact.UpdatedBy = request.CreateContactInformation.UpdatedBy;
    Contact.UpdatedDate = SystemClock.UtcNow;

    await Context.AddAsync(Contact);
    await Context.SaveChangesAsync();

    var phones = Mapper.Map<Phone>(request.CreateContactInformation);
    phones.ContactID = Contact.ID;
    phones.PhoneNumber = request.CreateContactInformation.PhoneNumber;     
    Context.AddAsync(phones);
    await Context.SaveChangesAsync();


    var email = Mapper.Map<Email>(request.CreateContactInformation);
    email.ContactID = Contact.ID;
    email.EmailAddress = request.CreateContactInformation.Email;
    Context.AddAsync(email);
    await Context.SaveChangesAsync();

但是我得到这个异常错误

内部服务器错误。错误内容:System.ArgumentException:不能 创建一个抽象类型 ....EF.Base.BaseEntity 的实例。 (范围 'type') at ...AsyncTransactionInterceptor.InterceptAsync[T](Task`1 任务,字符串方法名)

【问题讨论】:

  • 看起来我们需要更多关于您的模型的详细信息来解决问题。如果模型中有一些抽象方法。
  • 请分享您的模型和映射模型。

标签: c# asp.net asp.net-mvc linq asp.net-core


【解决方案1】:

我不太确定您的上下文实际上是什么。但我猜你的 Add 函数可能看起来像:

  await Context.Contact.AddAsync(Contact);

因为您没有指定要插入哪个表。而在其他 AddAsync() 函数中,您需要用 await 将其括起来。或者它仍然是一个 Task ,并且不会被调用。

【讨论】:

  • 谢谢你,Talesa!,我试过了,仍然给我同样的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
  • 1970-01-01
相关资源
最近更新 更多