Ошибка 6046 visual studio

Preceding answers show the good way to solve the problem but none works in real life.

Here’s a tested solution with Entity Framework 6 that works for me. So it should works for you.

Import your scalar valued function

Import your scalar valued function [FRM].[GetContentByIdAndCul] into your Entity Framework model. It automatically creates corresponding entry in the storage model of your EntityModels.edmx file :

<Function Name="GetContentByIdAndCul" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="FRM" ReturnType="nvarchar(max)">
      <Parameter Name="Id" Type="int" Mode="In" />
      <Parameter Name="Culture" Type="nvarchar(5)" Mode="In" />
</Function>

Add code to wrap call to your scalar valued function

Create new source file and add code to auto generated DbContext class (say her name is MyEntities) using Partial class mechanism (https://msdn.microsoft.com/en-us/library/wa80x488%28v=vs.120%29.aspx)

public partial class MyEntities
{
    [DbFunction("EntityModels.Store", "GetContentByIdAndCul")]
    public string GetContentByIdAndCul(int id, string culture)
    {
       var objectContext = ((IObjectContextAdapter)this).ObjectContext;

       var parameters = new List<ObjectParameter>();
       parameters.Add(new ObjectParameter("Id", id));
       parameters.Add(new ObjectParameter("Culture", culture));

       return objectContext.CreateQuery<string>("EntityModels.Store.GetContentByIdAndCul(@Id, @Culture)", parameters.ToArray())
            .Execute(MergeOption.NoTracking)
            .FirstOrDefault();
    }
}

Use your scalar valued function

Client code :

using (var context = new MyEntities())
{
    int id = 1;
    string culture = "fr-FR";
    string result = null;

    result = context.GetContentByIdAndCul(id, culture);
}

I have a scalar-valued function in my sql database.

I receive this error when importing this function into Entity Framework model:

Error 6046: Unable to generate function import return type of the store function 'GetContentByIdAndCul'.
The store function will be ignored and the function import will not be generated.   ..\EntityModels.edmx

my function tsql is:

ALTER FUNCTION [FRM].[GetContentByIdAndCul]
(@Id int,@Culture nvarchar(5))
RETURNS nvarchar(max)
AS
BEGIN
declare @Result nvarchar(max)

if @Id is not null
    set @Result='This Content not defined in this Language'

select @Result=Value from CUL.Contents
WHERE ID=@Id AND (CUL.Contents.Culture = LOWER(@Culture)
            OR CUL.Contents.Culture = LOWER(SUBSTRING(@Culture,1,2)))
return @Result
END


Preceding answers show the good way to solve the problem but none works in real life.

Here’s a tested solution with Entity Framework 6 that works for me. So it should works for you.

Import your scalar valued function

Import your scalar valued function [FRM].[GetContentByIdAndCul] into your Entity Framework model. It automatically creates corresponding entry in the storage model of your EntityModels.edmx file :

<Function Name="GetContentByIdAndCul" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="FRM" ReturnType="nvarchar(max)">
      <Parameter Name="Id" Type="int" Mode="In" />
      <Parameter Name="Culture" Type="nvarchar(5)" Mode="In" />
</Function>

Add code to wrap call to your scalar valued function

Create new source file and add code to auto generated DbContext class (say her name is MyEntities) using Partial class mechanism (https://msdn.microsoft.com/en-us/library/wa80x488%28v=vs.120%29.aspx)

public partial class MyEntities
{
    [DbFunction("EntityModels.Store", "GetContentByIdAndCul")]
    public string GetContentByIdAndCul(int id, string culture)
    {
       var objectContext = ((IObjectContextAdapter)this).ObjectContext;

       var parameters = new List<ObjectParameter>();
       parameters.Add(new ObjectParameter("Id", id));
       parameters.Add(new ObjectParameter("Culture", culture));

       return objectContext.CreateQuery<string>("EntityModels.Store.GetContentByIdAndCul(@Id, @Culture)", parameters.ToArray())
            .Execute(MergeOption.NoTracking)
            .FirstOrDefault();
    }
}

Use your scalar valued function

Client code :

using (var context = new MyEntities())
{
    int id = 1;
    string culture = "fr-FR";
    string result = null;

    result = context.GetContentByIdAndCul(id, culture);
}

EF 6.1.3 до сих пор не генерирует код для скалярных функций. Тем не менее, вы можете расширить свой класс DbContext и добавить свою собственную реализацию в вашу функцию. После этого вы можете вызывать свою функцию как любой другой объект внутри вашей EF-модели.

Создайте файл, содержащий [частичный класс] в том же [пространстве имен], что и ваша модель БД, и с тем же именем контекста модели. И добавьте этот код:

public partial class YourDBContext : DbContext
{
    public System.Data.Entity.Core.Objects.ObjectContext AsObjectContext()
    {
        return (this as System.Data.Entity.Infrastructure.IObjectContextAdapter).ObjectContext;
    }

    [DbFunction("YourDBModel.Store", "fn_PWDCOMPARE")]
    public bool fn_PWDCOMPARE(string pwd, string pwdhash)
    {
        var paramList = new ObjectParameter[]
        {
            new ObjectParameter("pwd", pwd),
            new ObjectParameter("pwdhash", pwdhash)
        };

        return this.AsObjectContext().CreateQuery<bool>("YourDBModel.Store.fn_PWDCOMPARE", paramList).Execute(MergeOption.NoTracking).FirstOrDefault();
    }

Затем вы просто вызываете эту новую функцию из своего кода:

bool retVal = YourDBContext.fn_PWDCOMPARE (pass, hash);

I have a scalar-valued function in my sql database.

I receive this error when importing this function into Entity Framework model:

Error 6046: Unable to generate function import return type of the store function 'GetContentByIdAndCul'.
The store function will be ignored and the function import will not be generated.   ..EntityModels.edmx

my function tsql is:

ALTER FUNCTION [FRM].[GetContentByIdAndCul]
(@Id int,@Culture nvarchar(5))
RETURNS nvarchar(max)
AS
BEGIN
declare @Result nvarchar(max)

if @Id is not null
    set @Result='This Content not defined in this Language'

select @Result=Value from CUL.Contents
WHERE [email protected] AND (CUL.Contents.Culture = LOWER(@Culture)
            OR CUL.Contents.Culture = LOWER(SUBSTRING(@Culture,1,2)))
return @Result
END


Preceding answers show the good way to solve the problem but none works in real life.

Here’s a tested solution with Entity Framework 6 that works for me. So it should works for you.

Import your scalar valued function

Import your scalar valued function [FRM].[GetContentByIdAndCul] into your Entity Framework model. It automatically creates corresponding entry in the storage model of your EntityModels.edmx file :

<Function Name="GetContentByIdAndCul" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="FRM" ReturnType="nvarchar(max)">
      <Parameter Name="Id" Type="int" Mode="In" />
      <Parameter Name="Culture" Type="nvarchar(5)" Mode="In" />
</Function>

Add code to wrap call to your scalar valued function

Create new source file and add code to auto generated DbContext class (say her name is MyEntities) using Partial class mechanism (https://msdn.microsoft.com/en-us/library/wa80x488%28v=vs.120%29.aspx)

public partial class MyEntities
{
    [DbFunction("EntityModels.Store", "GetContentByIdAndCul")]
    public string GetContentByIdAndCul(int id, string culture)
    {
       var objectContext = ((IObjectContextAdapter)this).ObjectContext;

       var parameters = new List<ObjectParameter>();
       parameters.Add(new ObjectParameter("Id", id));
       parameters.Add(new ObjectParameter("Culture", culture));

       return objectContext.CreateQuery<string>("EntityModels.Store.GetContentByIdAndCul(@Id, @Culture)", parameters.ToArray())
            .Execute(MergeOption.NoTracking)
            .FirstOrDefault();
    }
}

Use your scalar valued function

Client code :

using (var context = new MyEntities())
{
    int id = 1;
    string culture = "fr-FR";
    string result = null;

    result = context.GetContentByIdAndCul(id, culture);
}

  • Hello,

    For the scalar UDF, unfortunately, it is not supported by default even in Entity Framework 6 or 6.1.

    One way to use it in Entity Framework is to create a stored procedure using your scalar UDF and call the stored procedure in your project.

    Another way is to map it by hand using DbFunctionAttribute to call the function from SSDL directly as:

    The class is used to call function from SSDL

    public static class EdmFunctions
    
        {
    
            [DbFunction("DFDBModel.Store", "Function_20140606")]
    
            public static int Function_20140606(int param1, int param2)
    
            {
    
                throw new NotSupportedException("Direct calls are not supported.");
    
            }
    
        }
    

    Writting an object query pointing to the function:

    List<ObjectParameter> parameters = new List<ObjectParameter>(3);
    
                        parameters.Add(new ObjectParameter("param1", 1));
    
                        parameters.Add(new ObjectParameter("param2", 1));
    
                        var output = ((IObjectContextAdapter)db).ObjectContext.CreateQuery<int>("DFDBModel.Store.Function_20140606(@param1, @param2)", parameters.ToArray())
    
                            .Execute(MergeOption.NoTracking)
    
                            .FirstOrDefault();
    

    The function is created by default:

    CREATE FUNCTION [dbo].[Function_20140606]
    
    (
    
           @param1 int,
    
           @param2 int
    
    )
    
    RETURNS INT
    
    AS
    
    BEGIN
    
           RETURN @param1 + @param2
    
    END
    

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.

    Click
    HERE to participate the survey.

    • Marked as answer by

      Friday, August 15, 2014 7:18 AM

  • Я хочу добавить еще несколько аннотаций аннотации проверки для моделей (все модели здесь сначала генерируются базой данных), поэтому я использовал метаданные с помощью этой ссылки https://docs.microsoft.com/en-us/aspnet/mvc/overview/get-started/database-first-development/повышение-валидация данных. Никакие модели не обновляются, но строят сбои и вместо этого отображается предупреждение:

    Ошибка 6046: Невозможно сгенерировать функцию возврата типа импорта функции сохранения «fn_diagramobjects».

    Ошибка CS1061 «Учетная запись» не содержит определения для «ConfirmPassword», и не может быть найден метод расширения «ConfirmPassword», принимающий первый аргумент типа «Учетная запись» (вам не хватает директивы using или ссылки на сборку?) Project-asp- mvc D:.NET demoProjectproject-asp-mvcControllersUserController.cs 85 Active

    Это моя модель, сгенерированная из базы данных:

    using System;
    using System.Collections.Generic;
    
    public partial class Account
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Account()
        {
            this.Orders = new HashSet<Order>();
        }
    
        public string username { get; set; }
        public string password { get; set; }
        public Nullable<int> role_id { get; set; }
    
        public virtual Role Role { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<Order> Orders { get; set; }
    }
    

    Metadata.cs:

    using System.ComponentModel.DataAnnotations.Schema;
    using System.Linq;
    using System.Web;
    
    namespace project_asp_mvc.Models
    {
        public class AccountMetadata
        {
            [Required]
            [StringLength(50, ErrorMessage = "Username con not be longer than 50")]
            [EmailAddress]
            public string username { get; set; }
    
            [Required]
            [DataType(DataType.Password)]
            public string password { get; set; }
    
            [Required]
            [NotMapped]
            [DataType(DataType.Password)]
            [Compare("Password", ErrorMessage = "Please confirm your password again")]
            public string ConfirmPassword { get; set; }
        }
    }
    

    PartialClasses.cs

     using System;
     using System.Collections.Generic;
     using System.ComponentModel.DataAnnotations;
     using System.Linq;
     using System.Web;
    
     namespace project_asp_mvc.Models
     {
        [MetadataType(typeof(AccountMetadata))]
        public partial class Account
        {
        }
      }
    

    0 / 0 / 1

    Регистрация: 05.04.2016

    Сообщений: 134

    1

    02.12.2018, 16:45. Показов 5637. Ответов 10


    Студворк — интернет-сервис помощи студентам

    Скачал и установил Visual Studio, и решил значит, проверить как он работает. Я написал обычный Hello world но не могу никак его скомпилировать, выдается ошибка: Visual Studio обнаружена непредвиденная ошибка. Как ее исправить?
    P.S. Вообще ничего нельзя сделать с кодом, только сохранить можно.

    Непредвиденная ошибка в Visual Studio

    0

    112 / 91 / 31

    Регистрация: 24.10.2018

    Сообщений: 336

    02.12.2018, 16:54

    2

    У тебя в солюшне отсутствует какой-либо проект. Это нонсенс. Пересоздай решение по-нормальному с проектом, или добавь в существующее решение проект. И хватит давать файлам имена с пробелами, это жуть.

    0

    0 / 0 / 1

    Регистрация: 05.04.2016

    Сообщений: 134

    02.12.2018, 17:03

     [ТС]

    3

    какой еще солюшник? Что это? И что плохого в именах с пробелами? Так читабельнее

    Добавлено через 7 минут
    Ну я вроде создал проект, вроде работает…но командная строка то почему не выходит с Хелло ворлдом?

    0

    112 / 91 / 31

    Регистрация: 24.10.2018

    Сообщений: 336

    02.12.2018, 17:07

    4

    Написано же что «проектов: 0» в решении. Сорец, который ты редактируешь вообще никак не связан с открытым решением.
    Добавлено через 14 секунд

    Цитата
    Сообщение от Anton356
    Посмотреть сообщение

    какой еще солюшник?

    По-русски — это идиотское слово «решение».

    Добавлено через 14 секунд

    Цитата
    Сообщение от Anton356
    Посмотреть сообщение

    И что плохого в именах с пробелами?

    В них плохо — все.

    0

    0 / 0 / 1

    Регистрация: 05.04.2016

    Сообщений: 134

    02.12.2018, 17:13

     [ТС]

    5

    Ладно, с этим разобрался, но есть еще вопросы. Что за #include «pch.h» ? раньше я такого не видел.
    И еще cout:необъявленный идентификатор — что? но я же написал #include <iostream>!

    0

    0 / 0 / 1

    Регистрация: 05.04.2016

    Сообщений: 134

    02.12.2018, 17:35

     [ТС]

    6

    Теперь и компилятор исчез

    Непредвиденная ошибка в Visual Studio

    0

    112 / 91 / 31

    Регистрация: 24.10.2018

    Сообщений: 336

    02.12.2018, 17:44

    7

    Цитата
    Сообщение от Anton356
    Посмотреть сообщение

    Ладно, с этим разобрался, но есть еще вопросы. Что за #include «pch.h» ?

    Это pre-compiled headers заголовок. Это отличный пример минуса использования IDE для обучения программированию. Так как вместо просто обучения в банальном редакторе с компилятором, внимание на себя обращает всякий мусор добавляемый IDE. Забей на этот инклуд.

    Цитата
    Сообщение от Anton356
    Посмотреть сообщение

    И еще cout:необъявленный идентификатор — что? но я же написал #include <iostream>!

    Почитай про namespace’ы. В частности про std.

    Добавлено через 29 секунд

    Цитата
    Сообщение от Anton356
    Посмотреть сообщение

    Теперь и компилятор исчез

    Не вижу ничего исчезнувшего.

    0

    0 / 0 / 1

    Регистрация: 05.04.2016

    Сообщений: 134

    02.12.2018, 17:52

     [ТС]

    8

    Исчезла кнопка «Компилировать». Using namespace писал, не помогало, сейчас работает, странно… А как в командную строку то вывести?
    Раньше у меня была другая прога, вроду «Dev c++» называлась, она попроще была да и работала без капризов, а главное 20 гигов не занимала.

    0

    0 / 0 / 1

    Регистрация: 05.04.2016

    Сообщений: 134

    02.12.2018, 18:00

     [ТС]

    9

    Я про это говорил, когда сказал что исчезло.

    Непредвиденная ошибка в Visual Studio

    0

    0 / 0 / 1

    Регистрация: 05.04.2016

    Сообщений: 134

    03.12.2018, 11:08

     [ТС]

    10

    Почему в командную строку не выводит?

    0

    0 / 0 / 1

    Регистрация: 05.04.2016

    Сообщений: 134

    03.12.2018, 11:30

     [ТС]

    11

    Непредвиденная ошибка в Visual Studio

    0

    Пару дней назад установил Visual Studio 2022 на Windows 10 (все обновления). Сегодня создал первый проект, попытался запустить (скомпилировать), но получил десятки ошибок о том, что не удаётся открыть источник файл "имя_файла.h" (E1696) + другие ошибки. Всего ошибок почти 500.

    Список ошибок при попытке компиляции консольного проекта C++: тык.

    C# компилируется, не компилируется видимо только C++.
    Я открыл проводник в том месте (C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.33.31629include), где оно не может открыть эти «источник файл», и установил, что примерно треть всех файлов не имеют расширения (остальные файлы имеют расширение .h/.hpp).

  • Hello,

    For the scalar UDF, unfortunately, it is not supported by default even in Entity Framework 6 or 6.1.

    One way to use it in Entity Framework is to create a stored procedure using your scalar UDF and call the stored procedure in your project.

    Another way is to map it by hand using DbFunctionAttribute to call the function from SSDL directly as:

    The class is used to call function from SSDL

    public static class EdmFunctions
    
        {
    
            [DbFunction("DFDBModel.Store", "Function_20140606")]
    
            public static int Function_20140606(int param1, int param2)
    
            {
    
                throw new NotSupportedException("Direct calls are not supported.");
    
            }
    
        }
    

    Writting an object query pointing to the function:

    List<ObjectParameter> parameters = new List<ObjectParameter>(3);
    
                        parameters.Add(new ObjectParameter("param1", 1));
    
                        parameters.Add(new ObjectParameter("param2", 1));
    
                        var output = ((IObjectContextAdapter)db).ObjectContext.CreateQuery<int>("DFDBModel.Store.Function_20140606(@param1, @param2)", parameters.ToArray())
    
                            .Execute(MergeOption.NoTracking)
    
                            .FirstOrDefault();
    

    The function is created by default:

    CREATE FUNCTION [dbo].[Function_20140606]
    
    (
    
           @param1 int,
    
           @param2 int
    
    )
    
    RETURNS INT
    
    AS
    
    BEGIN
    
           RETURN @param1 + @param2
    
    END
    

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.

    Click
    HERE to participate the survey.

    • Помечено в качестве ответа

      15 августа 2014 г. 7:18

  • Понравилась статья? Поделить с друзьями:
  • Ошибка 6030 kyocera 2040
  • Ошибка 6045 при прошивке flashtool
  • Ошибка 6005 танки при входе
  • Ошибка 6010 танки
  • Ошибка 604000 5000