簡體   English   中英

保存新記錄實體框架時出現 C# 錯誤

[英]C# error while saving new record entity framwork

我在 sql 中有表作為

 USE [testDB]
 GO

 /****** Object:  Table [dbo].[MemberPanel]    Script Date: 03/01/2013 19:21:01 ******/
 SET ANSI_NULLS ON
 GO

 SET QUOTED_IDENTIFIER ON
 GO

 CREATE TABLE [dbo].[MemberPanel](
[UserId] [uniqueidentifier] NOT NULL,
[PanelId] [int] NOT NULL,
[Status] [int] NOT NULL,
  CONSTRAINT [PK_MemberPanel] PRIMARY KEY CLUSTERED 
 (
[UserId] ASC,
[PanelId] ASC
 )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
 ) ON [PRIMARY]

 GO

 ALTER TABLE [dbo].[MemberPanel]  WITH CHECK ADD  CONSTRAINT [FK_MemberPanel_Member]      FOREIGN KEY([UserId])
 REFERENCES [dbo].[Member] ([UserId])
 GO

 ALTER TABLE [dbo].[MemberPanel] CHECK CONSTRAINT [FK_MemberPanel_Member]
 GO

 ALTER TABLE [dbo].[MemberPanel]  WITH CHECK ADD  CONSTRAINT      [FK_PracticePanel_PracticePanel] FOREIGN KEY([PanelId])
 REFERENCES [dbo].[Panel] ([PanelId])
 GO

 ALTER TABLE [dbo].[MemberPanel] CHECK CONSTRAINT [FK_PracticePanel_PracticePanel]
 GO

我使用實體框架並使用 c# 代碼作為

 public static bool AddMemberPanels(List<int> panelIDs, Guid userId, int status)
    {
        try
        {
            using (FairShareEntities fairShareEntities = new FairShareEntities())
            {
                foreach (var panelID in panelIDs)
                {
                    var panel = new MemberPanel() { UserId = userId, PanelId = panelID,      Status = status };
                    fairShareEntities.AddToMemberPanel(panel);
                    fairShareEntities.SaveChanges();
                }

                return true;
            }
        }
        catch (Exception)
        {
            return false;
        }

    }

保存時通過錯誤更改它

      {"Entities in 'TestEntities.MemberPanel' participate in the                'FK_MemberPanel_Member' relationship. 0 related 'Member' were found. 1 'Member' is expected."}

請在這里幫助我我不知道為什么它不允許我添加新記錄,我還檢查了所有值,即 UserID 和 PanelId ,是的,它們作為 PK 存在於表中。

提前致謝

不知道這是否是確切的問題,但在 EF 中您通常不應該設置外鍵 ID。 相反,您應該從數據庫中提取 User 和 Panel 實體並將新 MemberPanel 實體的導航屬性設置為它們...

var newMemberPanel = ... // as you have already
newMemberPanel.Panel = existingPanel;
newMemberPanel.User = existingUser;

我認為這可能會更好。

此外,您最好使用上下文中的方法創建新實體,而不是單獨創建它然后將其添加到上下文中。 我發現這有時是一種更穩定的方法。 你應該能夠做這樣的事情......

 var newMemberPanel = ctx.MemberPanels.Add();

...然后按照我上面的說明繼續操作。

希望這可以幫助

那是外鍵錯誤。 這是一個 SQL 錯誤而不是實體框架錯誤。

在添加“MemberPanel”之前,您需要添加一個“Member”對象。

您的數據庫模式指定:

    ADD CONSTRAINT [FK_MemberPanel_Member] FOREIGN KEY([UserId]) 
    REFERENCES [dbo].[Member] ([UserId])

所以指定的 UserId 需要在表 Member

然后使用您的實體而不是 ID

var myLovedUser = fairShareEntities.Members.Where(x=>x.UserId = userID);
var incrediblePanel =  fairShareEntities.Panels.Where(x=>x.PanelId = panelId);
var memberPanel = new MemberPanel() {User = myLovedUser, Panel=incrediblePanel, Status= status };
fairShareEntities.AddToMemberPanel(panel);
fairShareEntities.SaveChanges();

感謝每一個人,我已經解決了這個問題:

 public static bool AddMemberPanels(List<int> panelIDs, Guid memberId, int status)
    {
        try
        {
            using (FairShareEntities fairShareEntities = new FairShareEntities())
            {
                foreach (var panelId in panelIDs)
                {
                    //get the member and panels
                    Member theMember =
                        (from m in fairShareEntities.Member.Include("MemberPanel") where m.UserId == memberId select m).FirstOrDefault();

                    //see if this Member is already on this Panel
                    if (!(from mp in theMember.MemberPanel where mp.PanelId == panelId select mp).Any())
                    {

                        //get the panel
                        Panel thePanel = (from p in fairShareEntities.Panel where p.PanelId == panelId select p).FirstOrDefault();

                        //add the panel to this Member
                        MemberPanel addMemberPanel = new MemberPanel()
                        {
                            UserId = memberId,
                            Status = status,
                            Panel = thePanel,
                            PanelId = panelId
                        };
                        theMember.MemberPanel.Add(addMemberPanel);
                        fairShareEntities.SaveChanges();
                    }
                }

                return true;
            }
        }
        catch (Exception)
        {
            return false;
        }

    }
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace frmSales
{
    public partial class Form1 : Form
    {
        //create object for models
        tblSales modelSales = new tblSales();
        tblSalesLines modelSalesLine = new tblSalesLines();
        View_1 modelView = new View_1();

        public Form1()
        {
            InitializeComponent();
            LoadCmbBox();
        }

        //Fill dropdown
        private void LoadCmbBox()
        {
            using (DBEntities db = new DBEntities ())
            {
                var name = from tblProduct in db.tblProduct
                           select tblProduct;

                comboBox1.DataSource = name.ToList();
                comboBox1.DisplayMember = "barcode";
            }
        }

        //txtCName accepts only alphabetical characters
        private void txtCName_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !(e.KeyChar == 8) && !(e.KeyChar == 32))
            {
                e.Handled = true;
                MessageBox.Show("This textbox accepts only alphabetical characters", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        //txtPhone accepts only Numbers
        private void txtPhone_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == 8))
            {
                e.Handled = true;
                MessageBox.Show("This textbox accepts only Numbers", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        //txtDec accepts only alphabetical characters
        private void txtDec_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !(e.KeyChar == 8) && !(e.KeyChar == 32))
            {
                e.Handled = true;
                MessageBox.Show("This textbox accepts only alphabetical characters", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        //txtQtc accepts only Numbers
        private void txtQtc_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == 8))
            {
                e.Handled = true;
                MessageBox.Show("This textbox accepts only Numbers", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        //txtUPrice accepts only Numbers
        private void txtUPrice_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(e.KeyChar >= '0' && e.KeyChar <= '9' || e.KeyChar == 8))
            {
                e.Handled = true;
                MessageBox.Show("This textbox accepts only Numbers", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            //AddButton();

            if (txtCName.Text == "")
            {
                MessageBox.Show("Please Enter Customer Name", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (txtAddress.Text == "")
            {
                MessageBox.Show("Please Enter Address", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (txtPhone.Text == "")
            {enter code here
                MessageBox.Show("Please Enter Telephone Number", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (txtDec.Text == "")
            {
                MessageBox.Show("Please Enter Description", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (txtQtc.Text == "")
            {
                MessageBox.Show("Please Enter Quantity", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (txtUPrice.Text == "")
            {
                MessageBox.Show("Please Enter Unit Price", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                AddButton();
                txtDec.Text = txtQtc.Text = txtUPrice.Text = txtTotal.Text = "";
            }
        }

        int rCount = 0;
        decimal amount = 0;
        private void AddButton()
        {
            if (txtDec.Text == "")
            {
                MessageBox.Show("Please Enter Description", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (txtQtc.Text == "")
            {
                MessageBox.Show("Please Enter Quantity", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else if (txtUPrice.Text == "")
            {
                MessageBox.Show("Please Enter Unit Price", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                dataGridView1.Rows.Add();

                rCount++;
                dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0].Value = rCount;
                dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[1].Value = txtDec.Text;
                dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[2].Value = txtQtc.Text;
                dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[3].Value = txtUPrice.Text;
                dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[4].Value = txtTotal.Text;

                amount = amount + Convert.ToDecimal(txtTotal.Text);
                txtAmount.Text = Convert.ToString(amount);
            }

        }

        private void txtUPrice_TextChanged(object sender, EventArgs e)
        {
            txtTotal.Text = "";
            if (txtUPrice.Text != "" && txtQtc.Text != "")
            {
                double Total = Convert.ToInt32(txtQtc.Text) * Convert.ToDouble(txtUPrice.Text);
                txtTotal.Text = Convert.ToString(Total);
            }

        }

        private void txtQtc_TextChanged(object sender, EventArgs e)
        {
            txtTotal.Text = "";
            if (txtUPrice.Text != "" && txtQtc.Text != "")
            {
                double Total = Convert.ToInt32(txtQtc.Text) * Convert.ToDouble(txtUPrice.Text);
                txtTotal.Text = Convert.ToString(Total);
            }
        }
        int invoiceNum = 1910020001;
        int invoiceCount = 0001;
        private void btnSave_Click(object sender, EventArgs e)
        {

            if (cmbSalesType.Text == "")
            {
                MessageBox.Show("Please Enter Sales Type", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                invoiceCount++;

                modelSales.InvNo = invoiceNum + invoiceCount;
                modelSales.SalesDate = DateTime.Now;
                modelSales.Amount = Convert.ToInt32(txtAmount.Text);
                modelSales.CustomerName = txtCName.Text;
                modelSales.Address = txtAddress.Text;
                modelSales.Tel = Convert.ToInt32(txtPhone.Text);
                modelSales.SalesType = cmbSalesType.Text;

                using (DBEntities db = new DBEntities())
                {
                    db.tblSales.Add(modelSales);
                    db.SaveChanges();


                    var select = (from tblSales in db.tblSales
                                  select tblSales.SalesID).Max();

                    modelSalesLine.SalesID = Convert.ToInt32(select);

                    for (int rows = 0; rows < dataGridView1.Rows.Count; rows++)
                    {
                        int col = 1;

                        modelSalesLine.ProductName = dataGridView1.Rows[rows].Cells[col++].Value.ToString();
                        modelSalesLine.Quantity = Convert.ToInt32(dataGridView1.Rows[rows].Cells[col++].Value.ToString());
                        modelSalesLine.UnitPrice = Convert.ToInt32(dataGridView1.Rows[rows].Cells[col++].Value.ToString());
                        modelSalesLine.Total = Convert.ToInt32(dataGridView1.Rows[rows].Cells[col++].Value.ToString());


                        db.tblSalesLines.Add(modelSalesLine);
                        db.SaveChanges();

                        MessageBox.Show("data saved successfully", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                }
            }
        }

        private void btnViewInvoice_Click(object sender, EventArgs e)
        {
            using (DBEntities db = new DBEntities())
            {
                DSsales ds = new DSsales();

                //Fil DT Sales
                var select = (from tblSales in db.tblSales
                              select tblSales.SalesID).Max();
                int maxId = Convert.ToInt32(select);

                var result = from tblSalesLines in db.tblSalesLines
                             where tblSalesLines.SalesID == maxId
                             select tblSalesLines;

                foreach (var item in result)
                {
                    var sales = ds.DT_SalesLine.NewDT_SalesLineRow();

                    sales[0] = item.SalesLineID;
                    sales[1] = item.SalesID;
                    sales[2] = item.ProductName;
                    sales[3] = item.Quantity;
                    sales[4] = item.UnitPrice;
                    sales[5] = item.Total;

                    ds.DT_SalesLine.AddDT_SalesLineRow(sales);
                }

                //Fil DT SalesLine
                var result1 = from tblSales in db.tblSales
                              where tblSales.SalesID == maxId
                              select tblSales;

                foreach (var item in result1)
                {
                    var sales = ds.DT_Sales1.NewDT_Sales1Row();

                    sales[0] = item.SalesID;
                    sales[1] = item.InvNo;
                    sales[2] = item.SalesDate;
                    sales[3] = item.Amount;
                    sales[4] = item.CustomerName;
                    sales[5] = item.Address;
                    sales[5] = item.Tel;
                    sales[5] = item.SalesType;

                    ds.DT_Sales1.AddDT_Sales1Row(sales);
                }
                CRSalesReport rpt = new CRSalesReport();
                rpt.SetDataSource(ds);

                frmCRsales frmCRsales = new frmCRsales();
                frmCRsales.crystalReportViewer1.ReportSource = rpt;

                frmCRsales.ShowDialog();
                frmCRsales.Dispose();
            }
        }

        private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.CurrentCell.ColumnIndex.Equals(5) && e.RowIndex != -1)
            {
                dataGridView1.Rows.Remove(dataGridView1.Rows[e.RowIndex]);
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.Text = "-- Select Barcode --";
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            using (DBEntities db = new DBEntities ())
            {
                try
                {
                    string barcode = comboBox1.Text;
                    var result2 = db.tblProduct.Where(x => x.barcode == barcode).FirstOrDefault();
                    txtDec.Text = result2.productName;
                }
                catch (Exception)
                {

                }

            }

        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM