C# 将添加迁移与EDM函数一起使用时出错

C# 将添加迁移与EDM函数一起使用时出错,c#,asp.net,ef-code-first,mapping,C#,Asp.net,Ef Code First,Mapping,我正在使用edm功能: [DbFunction("dbo", "RemoveDiacritics")] public static string RemoveDiacritics(string param) { throw new NotSupportedException("Direct calls are not supported."); } 我在ApplicationDBContextClass上添加了以下内容: protected override void OnModelC

我正在使用edm功能:

[DbFunction("dbo", "RemoveDiacritics")]
public static string RemoveDiacritics(string param)
{
    throw new NotSupportedException("Direct calls are not supported.");
}
我在ApplicationDBContextClass上添加了以下内容:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    //Register a convention so we can load our function
    modelBuilder.Conventions.Add(new RemoveDiacriticsFunctionConvention());
}
因为我首先使用代码,所以我创建了用于映射的类:

public class RemoveDiacriticsFunctionConvention : IStoreModelConvention<EntityContainer>
{
    public void Apply(EntityContainer item, DbModel model)
    {
        //Delare your parameters name, edm type and mode (You can ignore this if you use a parameter-less function)
        List<FunctionParameter> Parameters = new List<FunctionParameter>();
        Parameters.Add(FunctionParameter.Create("StringValue", GetStorePrimitiveType(model, PrimitiveTypeKind.String), ParameterMode.In));

        //Same thing goes for the return type(s) (Why is it a list? Perhaps you can return tables? I haven't tested however since it is no use to me)
        List<FunctionParameter> ReturnParameters = new List<FunctionParameter>();
        ReturnParameters.Add(FunctionParameter.Create("ReturnValue", GetStorePrimitiveType(model, PrimitiveTypeKind.String), ParameterMode.ReturnValue));

        //Create the payload and fill the required information alone with the parameter lists we declared
        EdmFunctionPayload payload = new EdmFunctionPayload();
        payload.IsComposable = true;
        payload.Schema = "dbo";
        payload.StoreFunctionName = "RemoveDiacritics";
        payload.ReturnParameters = ReturnParameters;
        payload.Parameters = Parameters;

        //Create the function with it's payload
        EdmFunction function = EdmFunction.Create("RemoveDiacritics", "dbo", DataSpace.SSpace, payload, new MetadataProperty[] { });

        //Add it to the model
        model.StoreModel.AddItem(function);
        model.Compile();
    }

    //Little helper method to get the primitive type based on the database provider
    private EdmType GetStorePrimitiveType(DbModel model, PrimitiveTypeKind typeKind)
    {
        return model
            .ProviderManifest
            .GetStoreType(TypeUsage.CreateDefaultTypeUsage(PrimitiveType.GetEdmPrimitiveType(typeKind)))
            .EdmType;
    }

}
System.InvalidOperationException:序列不包含任何元素 at System.Linq.Enumerable.Single[TSource](IEnumerable
1源)
位于System.Data.Entity.Utilities.XDocumentExtensions.GetStorageMappingItemCollection(XDocument
型号,DbProviderInfo和providerInfo)
位于System.Data.Entity.Migrations.Infrastructure.EdmModelDifference.Diff(XDocument
sourceModel,XDocument targetModel,惰性
1 modificationCommandTreeGenerator、MigrationSqlGenerator migrationSqlGenerator,字符串sourceModelVersion,字符串 targetModelVersion) 位于System.Data.Entity.Migrations.DbMigrator.Scaffold(字符串migrationName、字符串命名空间、布尔值ignoreChanges) 位于System.Data.Entity.Migrations.Design.MigrationScaffolder.Scaffold(字符串 migrationName,布尔值(更改) 位于System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.Scaffold(迁移文件夹 架子工) 在System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore()中 位于System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()处 序列不包含任何元素

错误来自以下行:

modelBuilder.Conventions.Add(new RemoveDiacriticsFunctionConvention());
到目前为止,我尝试在RemoveDiacriticsFunctionConvention类上添加[nomapped]属性,并:

modelBuilder.Ignore<RemoveDiacriticsFunctionConvention>();
modelBuilder.Ignore();
但它仍然给我同样的错误

modelBuilder.Ignore<RemoveDiacriticsFunctionConvention>();