更新
我在Nuget软件包上添加了对此的支持-https:
//github.com/Fodsuk/EntityframeworkExtras#nuget
(EF4,EF5,EF6)
查看GitHub存储库以获取代码示例。
稍有疑问,但是对于尝试将用户定义的表传递到存储过程中的人来说,它仍然有用。在研究了Nick的示例和其他Stackoverflow帖子之后,我想到了:
class Program{ static void Main(string[] args) { var entities = new NewBusinessEntities(); var dt = new DataTable(); dt.Columns.Add("WarningCode"); dt.Columns.Add("StatusID"); dt.Columns.Add("DecisionID"); dt.Columns.Add("Criticality"); dt.Rows.Add("EO01", 9, 4, 0); dt.Rows.Add("EO00", 9, 4, 0); dt.Rows.Add("EO02", 9, 4, 0); var caseId = new SqlParameter("caseid", SqlDbType.Int); caseId.Value = 1; var userId = new SqlParameter("userid", SqlDbType.UniqueIdentifier); userId.Value = Guid.Parse("846454D9-DE72-4EF4-ABE2-16EC3710EA0F"); var warnings = new SqlParameter("warnings", SqlDbType.Structured); warnings.Value= dt; warnings.TypeName = "dbo.udt_Warnings"; entities.ExecuteStoredProcedure("usp_RaiseWarnings_rs", userId, warnings, caseId); }}public static class ObjectContextExt{ public static void ExecuteStoredProcedure(this ObjectContext context, string storedProcName, params object[] parameters) { string command = "EXEC " + storedProcName + " @caseid, @userid, @warnings"; context.ExecuteStoreCommand(command, parameters); }}存储过程如下所示:
ALTER PROCEDURE [dbo].[usp_RaiseWarnings_rs] (@CaseID int, @UserID uniqueidentifier = '846454D9-DE72-4EF4-ABE2-16EC3710EA0F', --Admin @Warnings dbo.udt_Warnings READONLY)AS
用户定义的表如下所示:
CREATE TYPE [dbo].[udt_Warnings] AS TABLE( [WarningCode] [nvarchar](5) NULL, [StatusID] [int] NULL, [DecisionID] [int] NULL, [Criticality] [int] NULL DEFAULT ((0)))
我发现的约束包括:
- 传入的参数
ExecuteStoreCommand
必须与存储过程中的参数一致 - 您必须将每一列传递到用户定义的表中,即使它们具有默认值也是如此。所以看来我的UDT上没有IDENTITY(1,1)NOT NULL列



