我有一个InsertPerson存储过程,我需要它将GUID(Uniqueidentifier)返回到我正在创建的person对象中。实体框架代码首先是否可能实现这一点?我已经尝试了一切,实体框架忽略了我尝试使用输出参数返回的guid。如果有可能,有没有人有例子?
Person.cs :
public class Person
{
public Guid Id { get; set; }
public string FirstName { get; set; }
}
存储过程:
CREATE PROCEDURE [dbo].[InsertPerson]
@KeyPlayerId UNIQUEIDENTIFIER ,
@FirstNameNVARCHAR(255)
AS
-- Perform Insert
insert into [dbo.].[Person]....
-- Return GUID
select @Id as [Id];
END;
答案 0 :(得分:1)
我能够通过告诉Entity Framework Id是数据库生成的值来实现它。我将Insert过程映射到PersonMap类中的InsertPerson,并在OnModelCreating方法中创建模型时使用它。在存储过程中,我生成一个新的Id并将其传递回Entity Framework。希望这有帮助!
<强> PersonMap.cs 强>
public class PersonMap : EntityTypeConfiguration<Person>
{
public PersonMap()
{
// Primary Key
this.HasKey(t => t.Id);
// Tell Entity Framework the database will generate the key.
this.Property(t => t.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
// Properties
this.Property(t => t.FirstName)
.IsRequired()
.HasMaxLength(255);
//Map to Stored Procedure
this.MapToStoredProcedures(s => s.Insert(i => i.HasName("InsertPerson")));
}
}
<强> OnModelCreating 强>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new PersonMap());
}
InsertPerson存储过程
CREATE PROCEDURE InsertPerson
-- Since Id is marked as Database Generated we only need
-- a parameter for First Name
@FirstName nvarchar(255) = 0
AS
-- Variable to hold new Id
DECLARE @Id uniqueidentifier
-- Generate a new Id using NEWID function that returns a unique identifier
SET @Id = NEWID()
-- Perform Insert
INSERT INTO [dbo].[Person] VALUES (@Id, @FirstName)
-- Return the Id to Entity Framework
SELECT @Id AS 'Id'
答案 1 :(得分:0)
我认为这可能会对您有所帮助:
var sqlConnection1 = new SqlConnection("Your Connection String");
var cmd = new SqlCommand();
var reader;
cmd.CommandText = "StoredProcedureName";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
reader = cmd.ExecuteReader();
rdr = cmd.ExecuteReader();
var outputValue = Guid.Parse(cmd.Parameters["@Response"].Value.ToString());
sqlConnection1.Close();