我的数据库中有一个存储过程(sp_create_user
),用于在Users
表中创建用户。这是我的存储过程定义:
ALTER PROCEDURE sp_create_user
@Username nvarchar(50),
@Password nvarchar(50),
AS
BEGIN
-- SQL STATMENTS
END
c#中的User
对象是:
public partial class User
{
public User()
{
}
public int UserId { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
这是我将用户实体插入的EF映射到该存储过程:
modelBuilder.Entity<User>().MapToStoredProcedures(
s =>
s.Insert(i => i.HasName("sp_create_user"))
);
当我尝试执行新的用户创建时,我得到一个例外,即发送到存储过程的参数数量太大。在跟踪查询之后,我看到它向存储过程发送了User
类具有的所有字段。
如何告诉EF仅发送存储过程的相关字段?
答案 0 :(得分:1)
...
[System.ComponentModel.DataAnnotations.Schema.NotMapped]
public int UserId { get; set; }
public string Username { get; set; }
public string Password { get; set; }
[System.ComponentModel.DataAnnotations.Schema.NotMapped]
public string FirstName { get; set; }
[System.ComponentModel.DataAnnotations.Schema.NotMapped]
public string LastName { get; set; }
...
如果您不想修改课程,也可以尝试以下操作:
modelBuilder.Entity<User>().Ignore(u => u.UserId);