masterfy

 

ADO.NET Entity Framework 研究过程中遇到的问题

ADO.NET Entity Framework 是.Net Framework 3.5 SP1 引入的实体框架


         问题:1、没有批量添加、删除的方法,Linq To SQL是有的。
               2、调用存储过程:如果导入的函数返回值类型不是entity,则代码会生成到Model1.edmx中,不知如何调用?
                                如果导入返回值类型是entity,代码会生成到Model1.Designer.cs中,但执行完添加后报错,“数据读取器与指定的“rzeamtestModel.MM_BJ”不兼容。某个类型为“ID”的成员在同名的数据读取器中没有对应的列。”

 

更新:

1、关于导入函数返回值类型不是entity(为空或标量)的存储过程调用:

        /// <summary>
        /// 存储过程添加
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            EntityParameter[] param = {                             
                                      new EntityParameter("BJBM",DbType.String),
                                      new EntityParameter("BJMC",DbType.String),
                                      new EntityParameter("XHGG", DbType.String)
                                          };
            param[0].Value = "0002";
            param[1].Value = "键盘1";
            param[2].Value = "罗技";

            ExecuteFunction("INSERTMM_BJ", param);

            LoadData();
        }

        public void ExecuteFunction(string functionName, System.Data.EntityClient.EntityParameter[] parameters)
        {
            EntityCommand comm = new EntityCommand();
            comm.CommandType = CommandType.StoredProcedure;
            comm.Connection = (EntityConnection)db.Connection;
            comm.Parameters.AddRange(parameters);
            comm.CommandText = db.DefaultContainerName + "." + functionName;
            try
            {
                if (comm.Connection.State != System.Data.ConnectionState.Open)
                    comm.Connection.Open();
                var obj = comm.ExecuteNonQuery();
            }
            catch (System.Exception)
            {
                throw;
            }
            finally
            {
                comm.Connection.Close();
            }
        }

 

2、关于“数据读取器与指定的“rzeamtestModel.MM_BJ”不兼容。某个类型为“BJBM”的成员在同名的数据读取器中没有对应的列。”此错误,需要改造下存储过程,增加SELECT语句:

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

ALTER PROCEDURE [dbo].[USP_INSERTMM_BJ]
(@BJBM nvarchar(50),
@BJMC nvarchar(50),
@XHGG nvarchar(50),
@ID INT OUT)

AS

INSERT  MM_BJ VALUES  (@BJBM,@BJMC,@XHGG);

SET @ID=@@IDENTITY;

SELECT ID ,BJBM,BJMC,XHGG FROM MM_BJ WHERE ID=@ID;
--SELECT ID FROM MM_BJ WHERE ID=@ID;

 

如果想调用有返回值的函数,那么对应的存储过程中就必须有SELECT查询语句,且返回值中包含的列在SELECT中必须存在!注意此处用OUT参数的形式返回不行,必须用SELECT!

        /// <summary>
        /// 存储过程导入函数(返回值为实体)调用
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

       private void button5_Click(object sender, EventArgs e)
        {

     rzeamtestEntities db = new rzeamtestEntities();
            ObjectParameter paraID = new ObjectParameter("ID", DbType.Int32);
            db.INSERTMM_BJReturn("0003", "鼠标", "罗技", paraID);

            LoadData();
        }

 

posted on 2009-08-24 23:05  masterfy  阅读(2312)  评论(2)    收藏  举报

导航