0

私はこれらのような2つの関連するクラスを持っています:

public partial class WorkItem
{
    public WorkItem()
    {
        this.ChildWorkItems = new HashSet<WorkItem>();
        this.Attachments = new HashSet<Attachment>();
    }

    public int Id { get; set; }
    public Nullable<int> ParentId { get; set; }
    public string Title { get; set; }
    public string SenderUserName { get; set; }

    public virtual ICollection<WorkItem> ChildWorkItems { get; set; }
    public virtual WorkItem ParentWorkItem { get; set; }
    public virtual ICollection<Attachment> Attachments { get; set; }
}

および realted 1-n 添付ファイル:

public partial class Attachment
{
    public int Id { get; set; }
    public string Filename { get; set; }
    public Nullable<int> WorkItemId { get; set; }

    public virtual WorkItem WorkItem { get; set; }
}

ここで、添付ファイル付きの新しいものをデータベースに挿入したいと思いworkitemsます。挿入には次のコードを使用します。

最初にすべてのワークアイテムを置きます (添付ファイルに関係なく)

     var workItems = new List<WorkItem>();
     foreach (var username in AllUsers)
            {
                var workitem = new WorkItem();
                //fill the simple fields

                lst.Add(workitem);
                Context.WorkItems.Add(workitem);
            }

次に、添付ファイルを設定します。

        foreach (var fileName in MYFILES)
        {
            var file = new System.IO.FileInfo(fileName);

            foreach (var workItem in workItems)
            {

                var att =
                    new Attachment()
                    {
                        Filename = file.Name,
                    };

                context.Attachments.Add(att);
                att.WorkItem = workItem;

            }
        }

しかし、次の例外が発生します。

多重度の制約に違反しています。関係「AienCRMModel.FK_WorkItemAttachments_WorkItems」のロール「WorkItem」の多重度は 1 または 0..1 です。

興味深い点は、 One しかない場合workitem、すべて問題ないことです。WorkItem添付ファイルのないものが複数ある場合でも、すべて問題ありません。この問題は、少なくとも 1 つの添付ファイルを持つ複数の WorkItem がある場合に発生します。

他の投稿をたくさん読みましたが、有用なものは何も見つかりませんでした。

注 : EDMX ファイルからクラスを生成する T4 テンプレートで EF Code-First 4.3 を使用します。

事前にご協力いただき、誠にありがとうございます。

編集 私は言及されたテーブルの完全なEDMX図をここに添付しました: EDMX ダイアグラム

編集2

ここで .edmx ファイルを完成させます: http://www.4shared.com/file/zQUO_qk7/CrmModel141.html?

4

1 に答える 1

0

コードのどこかで、次のようにデータベースの異なる行に同じオブジェクト インスタンスを使用しています (ほんの一例)。

var o1 = new O1Class();
foreach (var o2 in collection)
{
    o2.O1s.Add(o1);
}

ただし、次のようにする必要があります。

foreach (var o2 in collection)
{
    o2.O1s.Add(new O1Class());
}

この例では、O1Class はその関係に O2Class を 1 つだけ持つことができますが、Entity Framework は o1 インスタンスの参照を保持するため、複数の O2Class インスタンスに追加すると、EF は現在の O1Class に複数の O2Class インスタンスがあると見なしますが、これは正しくありません。

于 2013-05-26T07:25:33.317 に答える