实体框架存储过程

时间:2016-06-28 21:55:47

标签: c# excel entity-framework stored-procedures

我正在构建一个Excel导入功能,允许用户指定哪些列映射到对象的哪个属性。然后使用反射,我创建一个新对象,设置属性值并将新对象插入DbSet。但是,某些新对象可能是重复的,应该更新现有记录,而不是作为新对象添加到DbSet中。

Excel表格不包含对象ID的列。因此,我想为其他字段(例如FirstName和LastName)的组合添加索引。我想传入一个对象列表到存储过程,如传入一个表参数;所以我可以从索引匹配的数据库中选择所有记录。

如何将对象列表传入Entity Framework存储过程?

2 个答案:

答案 0 :(得分:2)

DbSet已经是可以添加对象的列表对象。 如果您有一个唯一标识每个对象的功能键,那么您应该能够使用LINQ查找并更新它。

答案 1 :(得分:0)

您可以将它们传递给逗号分隔的列表(字符串),只要它小于8K字符即可。然后你可以通过这个功能拆分它们。 (该功能将在SP中使用。)

CREATE PROCEDURE ...
@NameList Varchar(8000)

Select * from People 
where (FirstName+'-'+LastName) in dbo.Split(@NameList,',')
....

基于分隔符chararter分割值的功能

CREATE FUNCTION [dbo].[Split]
(
    @Input VARCHAR(8000),
    @Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN
(
    WITH Split(stpos,endpos)
    AS(
        SELECT 0 AS stpos, CHARINDEX(@Delimiter,@Input) AS endpos
        UNION ALL
        SELECT endpos+1, CHARINDEX(@Delimiter,@Input,endpos+1)
            FROM Split
            WHERE endpos > 0
    )
    SELECT  SUBSTRING(@Input,stpos,COALESCE(NULLIF(endpos,0),LEN(@Input)+1)-stpos) As Item
    FROM Split
)