Ошибка 2019 указано недопустимое сопоставление элементов

I am implementing Entity Framework Code-First methodology in my project and got stuck in an issue.

Error Details: 18,12) : error 2019: Member Mapping specified is not valid. The type ‘Edm.Byte[Nullable=False,DefaultValue=]’ of member
‘status’ in type ‘IMS.DAL.Users_mast’ is not compatible with
‘SqlServer.binary[Nullable=False,DefaultValue=,MaxLength=8000,FixedLength=True]’
of member ‘status’ in type ‘CodeFirstDatabaseSchema.Users_mast’.

My Code:
User_mast.cs file contains:

[Column(TypeName = "binary")]
public byte status { get; set; } // Active | Inactive (1 | 0 ), where I want status column to be created as binary column in sql server.

public class context : DbContext
{
    public context()
        : base("name=sqlConn")
    {
    }

    public DbSet<Users_mast> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}

and finally,

    context obj = new context();

    public void add()
    {
        obj.Users.Add(new Users_mast() {user_fname="Agnib", user_lname="Pyne", user_email="a@gmail.com", user_mobile="9830972301", username="agnib", pwd="As1232", created_date=DateTime.Now, status=1 });
        obj.SaveChanges();
    }

On running, I am getting the above error. I can understand its due to the status field set as byte which is not getting mapped as binary.

Then what should I do to make the column in sql server as binary? Is there any list of mapping between sql server types and .net types specially in case of EF Code-First?

Any help is appreciated. Please help!!!

Полное сообщение об ошибке ниже:

(46,12): ошибка 2019: указанное сопоставление элементов недействительно. Тип ‘Edm.String[Nullable=True,DefaultValue=,MaxLength=Max,Unicode=True,FixedLength=False]’ члена ‘SEJ_STARDATE’ в типе ‘HotelSearch.APP_SEJOUR’ не совместим с ‘SqlServer.date[Nullable=True,DefaultValue=,Precision=0]’члена’ SEJ_STARDATE ‘в типе’CodeFirstDatabaseSchema.APP_SEJOUR’. (47,12): ошибка 2019: указанное сопоставление элементов недопустимо. Тип ‘Edm.String [Nullable = True, DefaultValue =, MaxLength = Max, Unicode = True, FixedLength = False] члена’SEJ_ENDDATE’в типе’ HotelSearch.APP_SEJOUR ‘не совместим с’ SqlServer.date [Nullable = True, DefaultValue =, Precision = 0] ‘члена’SEJ_ENDDATE’в типе’CodeFirstDatabaseSchema.APP_SEJOUR’. (112,12): ошибка 2019: указанное сопоставление элементов недопустимо. Тип ‘Edm.String[Nullable=True,DefaultValue=,MaxLength=Max,Unicode=True,FixedLength=False]’ члена ‘PRIX_PRICE’ в типе ‘HotelSearch.RFS_PRIX_R’ не совместим с ‘SqlServer.date[Nullable=True,DefaultValue=,Precision=0]’члена’ PRIX_PRICE ‘в типе’CodeFirstDatabaseSchema.RFS_PRIX_R’.

Код ниже:

var h = new Hotel();

var t = new APP_STAR {
            STA_IDSTAR = 11111,
            STA_STARRATING = "blah",
         };
h.APP_STAR.Add(t);
h.SaveChanges();

Очевидно, что это просто фиктивные данные для тестирования. Кто-нибудь может указать мне правильное направление относительно того, как исправить эту ошибку?

2016-08-24 11:00

1
ответ

Решение

Сообщение об ошибке довольно ясно:

The type 'Edm.String' of member 'SEJ_STARDATE' in type 'HotelSearch.APP_SEJOUR' is not compatible with 'SqlServer.date

Измените edm.String на распознаваемый формат даты и времени (MM/DD/YYYY), манипулируя его содержимым или используя DateTime.Parse.

2016-08-24 11:35

Я внедряю методологию Entity Framework Code-First в своем проекте и застрял в проблеме.

Сведения об ошибке: 18,12): ошибка 2019 : Указание членства недействительно. Тип «Edm.Byte [Nullable = False, DefaultValue =]» статуса участника в типе «IMS.DAL.Users_mast» несовместим с «SqlServer.binary [Nullable = False, DefaultValue =, MaxLength = 8000, FixedLength = True] ‘статуса участника’ в типе ‘CodeFirstDatabaseSchema.Users_mast’.

Мой код: файл User_mast.cs содержит:

[Column(TypeName = "binary")]
public byte status { get; set; } // Active | Inactive (1 | 0 ), where I want status column to be created as binary column in sql server.

public class context : DbContext
{
    public context()
        : base("name=sqlConn")
    {
    }

    public DbSet<Users_mast> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}

и наконец,

    context obj = new context();

    public void add()
    {
        obj.Users.Add(new Users_mast() {user_fname="Agnib", user_lname="Pyne", user_email="[email protected]", user_mobile="9830972301", username="agnib", pwd="As1232", created_date=DateTime.Now, status=1 });
        obj.SaveChanges();
    }

При запуске я получаю вышеуказанную ошибку. Я могу понять его из-за поля состояния, заданного как байта, который не отображается в виде двоичного кода.

Тогда что мне делать, чтобы сделать столбец в sql-сервере двоичным? Есть ли список сопоставлений между типами sql-сервера и типами.net специально в случае EF Code-First?

Любая помощь приветствуется. Пожалуйста помоги!!!

Я загрузил модель с сервера, и она отлично работает на моем рабочем столе без каких-либо модификаций кода или структуры сущностей. Вот новая ошибка, которую я получаю от серверной версии моего веб-сервиса:

System.Data.MappingException: указанная схема недействительна. Ошибки:

NightRiseModel.msl(143,12): ошибка 2019: указанное сопоставление элементов недопустимо. Тип «Edm.DateTimeOffset[Nullable=False,DefaultValue=,Precision=]» члена «User_Events_Timestamp» в типе «nightriseModel.user_events» несовместим с «MySql.timestamp[Nullable=False,DefaultValue=,Precision=0] ‘ члена ‘User_Events_Timestamp’ в типе ‘nightriseModel.Store.user_events’.

NightRiseModel.msl(172,12): ошибка 2019: указанное сопоставление элементов недопустимо. Тип «Edm.DateTimeOffset[Nullable=True,DefaultValue=,Precision=]» члена «User_Create_Date» в типе «nightriseModel.user» несовместим с «MySql.timestamp[Nullable=True,DefaultValue=,Precision=0] ‘ члена ‘User_Create_Date’ в типе ‘nightriseModel.Store.users’. в System.Data.Mapping.StorageMappingItemCollection.Init (EdmItemCollection edmCollection, StoreItemCollection storeCollection, IEnumerable1
xmlReaders, List
1 filePaths, логическое значение throwOnError)

в System.Data.Metadata.Edm.MetadataCache.StoreMetadataEntry.LoadStoreCollection (EdmItemCollection edmItemCollection, загрузчик MetadataArtifactLoader)

в System.Data.Metadata.Edm.MetadataCache.LoadItemCollection[T](IItemCollectionLoader`1 itemCollectionLoader, запись T)

в System.Data.Metadata.Edm.MetadataCache.GetOrCreateStoreAndMappingItemCollections (String cacheKey, загрузчик MetadataArtifactLoader, EdmItemCollection, edmItemCollection, Object& entryToken)

в System.Data.EntityClient.EntityConnection.LoadStoreItemCollections (рабочая область MetadataWorkspace, DbConnection storeConnection, DbProviderFactory factory, DbConnectionOptions connectionOptions, EdmItemCollection edmItemCollection, MetadataArtifactLoader ArtifactLoader)

в System.Data.EntityClient.EntityConnection.GetMetadataWorkspace (логическое значение initializeAllCollections)

в System.Data.EntityClient.EntityConnection.InitializeMetadata(DbConnection newConnection, DbConnection originalConnection, Boolean closeOriginalConnectionOnFailure)

в System.Data.EntityClient.EntityConnection.Open()

в System.Data.Objects.ObjectContext.EnsureConnection()

в System.Data.Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)

в System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable.GetEnumerator()

в System.Linq.Enumerable.FirstOrDefault[TSource](источник IEnumerable`1)

в System.Linq.Queryable.FirstOrDefault[TSource](источник IQueryable`1)

в NightRiseService.Authentication.Login(String UID, String Password) в [Путь удален]\authentication.asmx.cs:строка 29

Я применяю методологию Entity Framework Code-First в своем проекте и застрял в проблеме.

Сведения об ошибке: 18,12) : ошибка 2019: указанное сопоставление элементов недействительно. Тип ‘Edm.Byte[Nullable=False,DefaultValue=]’ члена «статус» в типе «IMS.DAL.Users_mast» несовместим с ‘SqlServer.binary[Nullable=False,DefaultValue=,MaxLength=8000,FixedLength=True]’ статуса члена в типе CodeFirstDatabaseSchema.Users_mast.

Мой код: Файл User_mast.cs содержит:

[Column(TypeName = "binary")]
public byte status { get; set; } // Active | Inactive (1 | 0 ), where I want status column to be created as binary column in sql server.

public class context : DbContext
{
    public context()
        : base("name=sqlConn")
    {
    }

    public DbSet<Users_mast> Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}

И наконец,

    context obj = new context();

    public void add()
    {
        obj.Users.Add(new Users_mast() {user_fname="Agnib", user_lname="Pyne", user_email="a@gmail.com", user_mobile="9830972301", username="agnib", pwd="As1232", created_date=DateTime.Now, status=1 });
        obj.SaveChanges();
    }

При запуске я получаю вышеуказанную ошибку. Я могу понять это из-за того, что поле состояния установлено как байт, который не отображается как двоичный.

Тогда что мне делать, чтобы сделать столбец на сервере sql двоичным? Есть ли список сопоставлений между типами сервера sql и типами .net, особенно в случае EF Code-First?

Любая помощь приветствуется. Пожалуйста помоги!!!

2 ответа

Измените свою собственность на:

[Column(TypeName = "bit")]
public bool status { get; set; }

Собственный тип C# bool специально создан для хранения значений true и false. Тип данных bool сопоставляется с типом данных SQL bit.

Тип данных binary SQL предназначен для хранения двоичных данных, таких как файлы или изображения. Если вы хотите сопоставить свойство C#, вы можете использовать тип данных byte[] (массив байтов). В этом случае код будет выглядеть примерно так:

[Column(TypeName = "binary")]
public byte[] status { get; set; }


3

Maurits van Beusekom
9 Авг 2015 в 13:58

В моем случае все столбцы были установлены правильно, но неуправляемый драйвер Oracle, по-видимому, не всегда правильно загружается в Visual Studio.

Я мог заставить его работать иногда, но часто это не срабатывало после перезапуска моего компьютера для разработки Visual Studio. Я экспериментировал с комбинациями перестроения + перезагрузки шаблонов T4 и перекомпиляции файлов в решении (MVC5 + EF + AngularJS + оптимизация в комплекте). В конце концов, это оказалось более простым решением:

Этот: Ошибка 2019: указанное сопоставление элементов недопустимо. | Сообщество Oracle[^]

  • (a) Откройте Справку Visual Studio/О Microsoft Visual Studio и нажмите кнопку OK, чтобы выйти из диалогового окна.
  • ИЛИ
  • (b) Откройте используемое соединение в обозревателе серверов.


0

m1m1k
7 Май 2020 в 19:05

Понравилась статья? Поделить с друзьями:
  • Ошибка 2009 айфон 7 плюс
  • Ошибка 2018 r keeper
  • Ошибка 2015 при восстановлении iphone
  • Ошибка 2009 ipad air
  • Ошибка 2018 fanuc