使用 DataContext 插入并获取 ID CSLA C#

Insert using DataContext and getting ID CSLA C#

如何使用 CSLA 在 C# 中的插入过程中检索 ID?存储过程向数据库 table 插入,然后在插入后有一个 SELECT @Id(用 SCOPE_IDENTITY() 设置)。

这是要在 C# 中插入的代码:

using (var mgr = ContextManager<PersonDataContext>.GetManager("TestDB"))
{
    var results = mgr.DataContext.up_StoredProcToInsert(
        "David",
        30,
    );
}

尝试以下基于 CRUD Operations using Stored Procedure in Entity Framework 的示例:

SP:

CREATE PROCEDURE SP_Ins_Test 
    @name nchar(10)
AS
BEGIN

    SET NOCOUNT ON;
    INSERT INTO dbo.test(name)
    SELECT @name

    SELECT SCOPE_IDENTITY() AS ResultId
END
GO

C#代码:

DemoDB_JRDevEntities db = new DemoDB_JRDevEntities();
SP_Ins_Test_Result r=db.SP_Ins_Test("Raj").First();
string id= r.ResultId.ToString();

虽然该示例没有使用存储过程,但依赖于 EF 自己完成工作,您可以查看 ProjectTracker 示例中的 EF 数据访问层以了解如何实现插入操作:

https://github.com/MarimerLLC/csla/blob/master/Samples/ProjectTracker/ProjectTracker.DalEf/ProjectDal.cs#L82

    public void Insert(ProjectDto item)
    {
      using (var ctx = ObjectContextManager<PTrackerEntities>.GetManager("PTrackerEntities"))
      {
        var newItem = new Project
        {
          Name = item.Name,
          Description = item.Description,
          Started = item.Started,
          Ended = item.Ended
        };
        ctx.ObjectContext.AddToProjects(newItem);
        ctx.ObjectContext.SaveChanges();
        item.Id = newItem.Id;
        item.LastChanged = newItem.LastChanged;
      }
    }