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
1 filePaths, логическое значение throwOnError)
xmlReaders, List
в 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(Nullable
1 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