Linq2SQL没有插入相关实体

问题描述 投票:0回答:3

我试图用linq2sql插入两个相关的表,但我的代码只插入一个实体(电子邮件),我没有任何例外 - 只是没有插入其他实体(附件)。

我认为我在协会的某个地方有一个错误,但我无法弄清楚如何正确设置它。

感谢帮助。

插入代码:

using (TransactionScope main_transaction = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(120)))
            {

                foreach (var attachment in attachmets)
                    email.Attachments.Add(attachment);

                _emails.InsertOnSubmit(email);

                _context.SubmitChanges();

                main_transaction.Complete();
            }

几个:

[Table(Name = "maily")]
internal class Email
{
    private EntitySet<Attachment> _attachments;

    public Email()
    {
        this._attachments = new EntitySet<Attachment>(); 
    }

    [Column(IsPrimaryKey = true, IsDbGenerated = true, Name = "ID_mailu", AutoSync = AutoSync.OnInsert)]
    public virtual int ID_mailu { get; set; }



    [Association(Storage = "_attachments", OtherKey = "id_mailu")]
    public ICollection<Attachment> Attachments
    {
        get { return _attachments.ToList(); }
        set { _attachments.Assign(value); }
    }
}

[Table(Name = "MailPrilohy")]
internal class Attachment
{
    private EntityRef<Email> _email;

    public Attachment()
    {
        _email = default(EntityRef<Email>);
    }

    [Column(IsPrimaryKey =true, IsDbGenerated = true, Name = "id_prilohy", CanBeNull = false, AutoSync = AutoSync.OnInsert)]
    public int Id_Prilohy { get; set; }

    [Column(Name = "id_mailu", CanBeNull = false, IsDbGenerated = true)]
    public int id_mailu { get; set; }

    [Association(Storage = "_email", ThisKey = "id_mailu", OtherKey = "ID_mailu", IsForeignKey = true)]
    public Email Email
    {
        get { return _email.Entity; }
        set { _email.Entity = value; }
    }

}

}

c# linq
3个回答
0
投票

所以我刚刚解决了这个问题......

问题出在几个地方。

1s是关联错过外键属性..

[Association(Storage = "_email", ThisKey = "id_mailu", OtherKey = "ID_mailu", IsForeignKey = true)]
        public Email Email
        {
            get { return _email.Entity; }
            set { _email.Entity = value;}
        }

接下来,我应该插入附件 - >不是电子邮件。

_context.Attachments.InsertAllOnSubmit(attachmets);

-1
投票

你能试着看看这对你有用吗?

using (TransactionScope main_transaction = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromSeconds(120)))
            {

                foreach (var attachment in attachmets)
                    attachment.Email = email; // only this line changed

                _emails.InsertOnSubmit(email);

                _context.SubmitChanges();

                main_transaction.Complete();
            }
© www.soinside.com 2019 - 2024. All rights reserved.