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();
}