我正在构建一个Excel导入功能,允许用户指定哪些列映射到对象的哪个属性。然后使用反射,我创建一个新对象,设置属性值并将新对象插入DbSet。但是,某些新对象可能是重复的,应该更新现有记录,而不是作为新对象添加到DbSet中。
Excel表格不包含对象ID的列。因此,我想为其他字段(例如FirstName和LastName)的组合添加索引。我想传入一个对象列表到存储过程,如传入一个表参数;所以我可以从索引匹配的数据库中选择所有记录。
如何将对象列表传入Entity Framework存储过程?
答案 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
)