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!!!
The full error message is below:
(46,12) : error 2019: Member Mapping specified is not valid. The type
‘Edm.String[Nullable=True,DefaultValue=,MaxLength=Max,Unicode=True,FixedLength=False]’
of member ‘SEJ_STARDATE’ in type ‘HotelSearch.APP_SEJOUR’ is not
compatible with
‘SqlServer.date[Nullable=True,DefaultValue=,Precision=0]’ of member
‘SEJ_STARDATE’ in type ‘CodeFirstDatabaseSchema.APP_SEJOUR’. (47,12) :
error 2019: Member Mapping specified is not valid. The type
‘Edm.String[Nullable=True,DefaultValue=,MaxLength=Max,Unicode=True,FixedLength=False]’
of member ‘SEJ_ENDDATE’ in type ‘HotelSearch.APP_SEJOUR’ is not
compatible with
‘SqlServer.date[Nullable=True,DefaultValue=,Precision=0]’ of member
‘SEJ_ENDDATE’ in type ‘CodeFirstDatabaseSchema.APP_SEJOUR’. (112,12) :
error 2019: Member Mapping specified is not valid. The type
‘Edm.String[Nullable=True,DefaultValue=,MaxLength=Max,Unicode=True,FixedLength=False]’
of member ‘PRIX_PRICE’ in type ‘HotelSearch.RFS_PRIX_R’ is not
compatible with
‘SqlServer.date[Nullable=True,DefaultValue=,Precision=0]’ of member
‘PRIX_PRICE’ in type ‘CodeFirstDatabaseSchema.RFS_PRIX_R’.
The code is below:
var h = new Hotel();
var t = new APP_STAR {
STA_IDSTAR = 11111,
STA_STARRATING = "blah",
};
h.APP_STAR.Add(t);
h.SaveChanges();
Obviously this is just dummy data for testing. Can anyone point me in the right direction as to how to fix this error?
The full error message is below:
(46,12) : error 2019: Member Mapping specified is not valid. The type
‘Edm.String[Nullable=True,DefaultValue=,MaxLength=Max,Unicode=True,FixedLength=False]’
of member ‘SEJ_STARDATE’ in type ‘HotelSearch.APP_SEJOUR’ is not
compatible with
‘SqlServer.date[Nullable=True,DefaultValue=,Precision=0]’ of member
‘SEJ_STARDATE’ in type ‘CodeFirstDatabaseSchema.APP_SEJOUR’. (47,12) :
error 2019: Member Mapping specified is not valid. The type
‘Edm.String[Nullable=True,DefaultValue=,MaxLength=Max,Unicode=True,FixedLength=False]’
of member ‘SEJ_ENDDATE’ in type ‘HotelSearch.APP_SEJOUR’ is not
compatible with
‘SqlServer.date[Nullable=True,DefaultValue=,Precision=0]’ of member
‘SEJ_ENDDATE’ in type ‘CodeFirstDatabaseSchema.APP_SEJOUR’. (112,12) :
error 2019: Member Mapping specified is not valid. The type
‘Edm.String[Nullable=True,DefaultValue=,MaxLength=Max,Unicode=True,FixedLength=False]’
of member ‘PRIX_PRICE’ in type ‘HotelSearch.RFS_PRIX_R’ is not
compatible with
‘SqlServer.date[Nullable=True,DefaultValue=,Precision=0]’ of member
‘PRIX_PRICE’ in type ‘CodeFirstDatabaseSchema.RFS_PRIX_R’.
The code is below:
var h = new Hotel();
var t = new APP_STAR {
STA_IDSTAR = 11111,
STA_STARRATING = "blah",
};
h.APP_STAR.Add(t);
h.SaveChanges();
Obviously this is just dummy data for testing. Can anyone point me in the right direction as to how to fix this error?
Я применяю методологию 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
Member 11072126
Ответов: 2
сведения об ошибке:
(18,12) : ошибка 2019: указанное сопоставление членов недопустимо. Типа ‘ЭДМ.Байт[и nullable=false,то свойство DefaultValue=]’ о статусе члена » в тип ‘ИМС.Даль.Users_mast не совместима с SQL сервер.двоичный[значение null=false,то свойство DefaultValue=,параметр maxlength=8000,FixedLength=правда]’ член ‘статус’ в тип ‘CodeFirstDatabaseSchema.Users_mast’.
мой код:
Файл User_mast.cs содержит:
[Столбец(имя типа = двоичный)]
public byte status { get; set; } // Active | Inactive (1 | 0 ), где я хочу, чтобы столбец состояния был создан как двоичный столбец в sql server.
файл context.cs содержит:
контекст публичного класса : DbContext
{
общественные связи()
: base(«name=sqlConn»)
{
}
общественности в dbset&ЛТ;Users_mast> пользователи { получить; набор; }
охраняемых переопределить недействительными OnModelCreating(DbModelBuilder в modelbuilder)
{
база.OnModelCreating(modelBuilder);
}
}
и напоследок,
файл test.cs содержит:
context obj = новый контекст();
общественного недействительными добавить()
{
об..Пользователи.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.Теперь статус=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!!!
2 Ответов
Рейтинг:
18
DamithSL
если вам нужно хранить только 0 или 1 значение в столбце, вы можете просто использовать битовый тип данных в sql server и логический тип данных в файле .net.
также .net Byte[] будет преобразован в двоичный файл в sql server
Member 11072126
Большое спасибо, чувак. Это сработало.
Рейтинг:
0
m1m1k
In my case, all columns were set correctly, but Oracle Unmanaged Driver apparently doesn't always load into visual studio quite right. I could get it to work *sometimes*, but it often failed after restarting my visual studio development machine. I experimented with combinations of rebuilding + reloading T4 templates and Re-compiling files in the solution (MVC5 + EF + AngularJS + Bundled Web optimization). In the end, this turned out to be a more straight forward solution: This: <a href="https://community.oracle.com/thread/2398397">Error 2019: Member Mapping specified is not valid. | Oracle Community</a>[<a href="https://community.oracle.com/thread/2398397" target="_blank" title="New Window">^</a>] - (a) Open Visual Studio Help/About Microsoft Visual Studio and click OK button to exit the dialog box - OR - (b) Open the to-be-used connection in Server Explorer
Richard MacCutchan
Как вы можете видеть выше, это было решено пять лет назад.
Я внедряю методологию 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?
Любая помощь приветствуется. Пожалуйста помоги!!!
- Remove From My Forums
-
Question
-
User1292358045 posted
I have entity create as database first.
during developing, I want to change data type of a field from numeric (18, 0) to int.
I change the field in sql server, in edmx page, I choose update model from database, save all.
During the compilation, I got Error 2019 Member Mapping specified in not valid error, stating Edm.Decimal of member is not compatible with SqlServer.Int type
however, it seems the compilation go through despite the error
please help
Answers
-
User1918509225 posted
Hi Cheng ,
For your problem ,I think the problem is that your conceptual model has a property defined as decimal first,when you generate your model from database first,while in your update your table ,and your conceptual model will not change if you modify DB
side,even if you perform the“update model from datatbase” ,so I suggest that you can click on your entity on edmx,and right click on the model,choose the properties,set the type of your property as “Int32”,corresponding to your sql server type.
More details about your problem,you can refer to the link below:
http://stackoverflow.com/questions/15545469/poco-class-in-ef-not-working-as-expected/16216388#16216388
Hope it can help you.
Best Regards,
Kevin Shen.
- Marked as answer by
Thursday, October 7, 2021 12:00 AM
- Marked as answer by
- Remove From My Forums
-
Question
-
User1292358045 posted
I have entity create as database first.
during developing, I want to change data type of a field from numeric (18, 0) to int.
I change the field in sql server, in edmx page, I choose update model from database, save all.
During the compilation, I got Error 2019 Member Mapping specified in not valid error, stating Edm.Decimal of member is not compatible with SqlServer.Int type
however, it seems the compilation go through despite the error
please help
Answers
-
User1918509225 posted
Hi Cheng ,
For your problem ,I think the problem is that your conceptual model has a property defined as decimal first,when you generate your model from database first,while in your update your table ,and your conceptual model will not change if you modify DB
side,even if you perform the“update model from datatbase” ,so I suggest that you can click on your entity on edmx,and right click on the model,choose the properties,set the type of your property as “Int32”,corresponding to your sql server type.
More details about your problem,you can refer to the link below:
http://stackoverflow.com/questions/15545469/poco-class-in-ef-not-working-as-expected/16216388#16216388
Hope it can help you.
Best Regards,
Kevin Shen.
- Marked as answer by
Thursday, October 7, 2021 12:00 AM
- Marked as answer by
Сначала мне нужно подключить систему к оракулу, используя модель объекта. У меня есть модель с сущностью «Entity1». «MyBool», как следует из названия, является логическим свойством.
Я успешно сгенерировал сценарий sql из модели и запустил его в базе данных оракула.
Тогда у меня есть такой код:
static void Main(string[] args)
{
Model1Container context = new Model1Container();
Entity1 entity = context.Entity1.FirstOrDefault();
}
Этот код выдает это исключение:
Указанная схема недействительна. Ошибки: Model1.msl(8,12): ошибка 2019: указанное сопоставление элементов недопустимо. Тип Edm.Boolean[Nullable=False,DefaultValue=] члена MyBool типа Model1.Entity1 несовместим с OracleEFProvider.number[Nullable=False,DefaultValue=,Precision=1,Scale=0 ]» члена «MyBool» в типе «Model1.Store.Entity1».
Я прочитал много тем, и многие люди сказали добавить:
<oracle.dataaccess.client>
<settings>
<add name="bool" value="edmmapping number(1,0)" />
</settings>
</oracle.dataaccess.client>
В файле конфигурации (в моем случае это консольное приложение, затем app.config). Но это ничего не изменило. Действительно, я могу установить любое значение этого параметра, и ошибка будет точно такой же. Похоже, этот параметр не читается.
Затем некоторые люди сказали: добавьте в проект DLL Oracle.DataAccess. Что я и сделал, и результаты были такими же.
Я знаю, что есть много тредов на эту тему, но любой из них мне помог, и я не знаю, что еще делать. Просто хочу отметить, что моя реальная модель приложения уже работает на Sql Server.
Я очень новичок в iseries/DB2.
Мы используем V7R3. У нас есть таблица, которая каждый день генерируется программой RPG в виде физического файла. Для доступа к данным таблицы из java мы используем драйвер jt400.jar jdbc.
Большинство запросов к таблицам работают нормально, но некоторые сложные запросы, использующие «DENSE_RANK() OVER(ORDER BY» и «ROW_NUMBER() OVER(PARTITION BY»), время от времени зависают и вызывают 100% загрузку ЦП, только убивая задание на стороне AS400. решает вопрос.
В логе AS400 вижу:
Job 969954/QUSER/QZDASOINIT started on 02/21/19 at 09:36:46 in subsystem
QUSRWRK in QSYS. Job entered system on 02/21/19 at 09:36:46.
User USERXX from client X.X.X.X connected to server.
Use of function TIMESTAMP_FORMAT in QSYS2 not valid.
Use of function TIMESTAMP_FORMAT in QSYS2 not valid.
Data mapping error on member TABLE_NAME.
Data mapping error on member TABLE_NAME.
Data mapping error on member TABLE_NAME.
Data mapping error on member TABLE_NAME.
Value in date, time, or timestamp string not valid.
Это похоже на проблему, описанную в Почему я получаю исключение «[SQL0802] Ошибка преобразования данных при преобразовании данных»?.
и, вероятно, проблема связана с недопустимыми данными, хранящимися в столбцах типа DATE.
Глядя на столбцы DATE, я вижу, что некоторые записи отображаются как <null> в SQuirrel SQL Client. Интересно, что вот два разных <null>, возвращаемых разными запросами.
Если я побегу
select distinct VARCHAR_FORMAT(DATE_COLUMN, 'YYYY/MM/DD') from TABLE_NAME
Я получил
0001/01/01
а также
9999/12/31
для этих строк <null>.
Если я запускаю Select * from TABLE, где DATE_COLUMN имеет значение null, я не получаю никаких результатов. Так что я не уверен, что это за <null>.
Не уверен, что эти записи могут вызвать проблему.
УПД:, когда я бегу
Select * from TABLE
Я вижу ошибки в журнале клиента JDBC:
Warning: [SQL0181] Value in date, time, or timestamp string not valid.
SQLState: 01534
ErrorCode: 181
Warning: [SQL0181] Value in date, time, or timestamp string not valid.
SQLState: 01534
ErrorCode: 181Warning: [SQL0181] Value in date, time, or timestamp string not valid.
SQLState: 01534
ErrorCode: 181
Warning: [SQL0181] Value in date, time, or timestamp string not valid.
SQLState: 01534
ErrorCode: 181
Query 1 of 1, Rows read: 100, Elapsed time (seconds) - Total: 0.252, SQL query: 0.005, Reading results: 0.247
На основе https://www.consolut.com/en/s/sap-ides-access/d/s/p/40/doc/XH-SQL0181/ где-то в таблице должна быть неверная дата
Вопрос, есть ли способ найти и отфильтровать записи с «неверными» данными (вызывающими указанное выше исключение в журнале) со стороны SQL?
Я загрузил модель с сервера, и она отлично работает на моем рабочем столе без каких-либо модификаций кода или структуры сущностей. Вот новая ошибка, которую я получаю от серверной версии моего веб-сервиса:
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="[email protected]", user_mobile="9830972301", username="agnib", pwd="As1232", created_date=DateTime.Now, status=1 });
obj.SaveChanges();
}
При запуске я получаю вышеуказанную ошибку. Я могу понять его из-за поля состояния, заданного как байта, который не отображается в виде двоичного кода.
Тогда что мне делать, чтобы сделать столбец в sql-сервере двоичным? Есть ли список сопоставлений между типами sql-сервера и типами.net специально в случае EF Code-First?
Любая помощь приветствуется. Пожалуйста помоги!!!