0

更新しました:

Detailsview Insert Control を使用しており、CheckBoxList のチェックボックスからデータベースに新しい行を作成しようとしています。「INSERTステートメントがFOREIGN KEY制約と競合しています」というメッセージが表示されます

これが私のcsです:

  protected void AddPrincipleStaffDetailsView_ItemInserting(object sender, DetailsViewInsertEventArgs e)
    {
        CheckBoxList PrincipleStaffTitle = (CheckBoxList)FindControl("PrincipleStaffTitle");

        if (PrincipleStaffTitle != null)
        {
            foreach (ListItem item in PrincipleStaffTitle.Items)
            {
                if (item.Selected)
                {

                    string stringSession = Session["ProductionID"].ToString();
                    int intProductionID = Int32.Parse(stringSession);

                    var ID = item.Value;



                    using (var context = new FactoryTheaterModelFirstContainer())
                    {
                        PrincipleStaff principlestaff = new PrincipleStaff();

                        principlestaff.PrincipleStaffTitle = ID;
                        principlestaff.Production_proProductionID = intProductionID;

                        context.PrincipleStaffs.Add(principlestaff);
                        context.SaveChanges();
                    }

                }
            }
        }

ここにaspxがあります:

<asp:EntityDataSource ID="PrincipleStaffSource" runat="server" ConnectionString="name=FactoryTheaterModelFirstContainer" DefaultContainerName="FactoryTheaterModelFirstContainer" EnableFlattening="False" EntitySetName="PrincipleStaffs" EntityTypeFilter="PrincipleStaff" EnableInsert="True"></asp:EntityDataSource>
<asp:DetailsView ID="AddPrincipleStaffDetailsView" runat="server" AutoGenerateRows="False" DataKeyNames="PrincipleStaffID" DataSourceID="PrincipleStaffSource" Height="50px" Width="730px" DefaultMode="Insert" OnItemInserting="AddPrincipleStaffDetailsView_ItemInserting" OnItemInserted="AddPrincipleStaffDetailsView_ItemInserted">
    <Fields>
        <asp:TemplateField HeaderText="Add Principle Staff Role:" SortExpression="PrincipleStaffTitle">
            <InsertItemTemplate>
                <asp:CheckBoxList ID="PrincipleStaffTitle" runat="server" SelectedValue='<%# Bind("PrincipleStaffTitle") %>'>
                    <asp:ListItem Value="Director">Director(s)</asp:ListItem>
                    <asp:ListItem Value="Assistant Director">Assistant Director(s)</asp:ListItem>
                    <asp:ListItem Value="Written By">Written By(s)</asp:ListItem>
                    <asp:ListItem Value="Executive Producer">Executive Producer(s)</asp:ListItem>
                    <asp:ListItem Value="Producer">Producer(s)</asp:ListItem>
                    <asp:ListItem Value="Techincal Director">Technical Director(s)</asp:ListItem>
                </asp:CheckBoxList>
            </InsertItemTemplate>
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Bind("PrincipleStaffTitle") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:CommandField ShowInsertButton="True" />
    </Fields>
</asp:DetailsView>

Production.proProductionID は、PrincipleStaff Production_proProductionid 列に取得しようとしている外部キーです。FK 関係を作成できないようです。

提供できるヘルプをありがとう!

4

1 に答える 1

0

以下のコードは機能します。それ以来、context.savechanges(); を移動しました。ループの外。私の問題は、ItemInserted コマンドで発生していました。

protected void AddPrincipleStaffDetailsView_ItemInserting(object sender, DetailsViewInsertEventArgs e)
    {
        CheckBoxList PrincipleStaffCheckBox = (CheckBoxList)AddPrincipleStaffDetailsView.FindControl("PrincipleStaffTitleCheckBoxList");

        if (PrincipleStaffCheckBox.Items.Count > 0)
        {
            foreach (ListItem item in PrincipleStaffCheckBox.Items)
            {
                if (item.Selected)
                {

                    string stringSession = Session["ProductionID"].ToString();
                    int intProductionID = 0;
                    intProductionID = Int32.Parse(stringSession);
                    var principlestafftitle = item.Value;

                        try
                        {
                            using (var context = new FactoryTheaterModelFirstContainer())
                            {

                                Production proid = context.Productions.Single(i => i.proProductionID == intProductionID);
                                PrincipleStaff principlestaff = new PrincipleStaff()
                                {
                                    PrincipleStaffTitle = principlestafftitle,
                                    Production_proProductionID = intProductionID
                                };

                                proid.PrincipleStaffs.Add(principlestaff);
                                context.SaveChanges();
                            }
                        }
                        catch (Exception f)
                        {
                            Console.WriteLine(f); // or log to file, etc.
                            throw; // re-throw the exception if you want it to continue up the stack
                        }
                }
            }
        }
    }
于 2013-08-02T21:21:18.010 に答える