我正在我的项目中实施实体框架代码优先方法,并陷入了一个问题。
我的代码:Error Details: 18,12): Error 2019: Member Mapping specified is not valid。类型是"Edm"。Byte[Nullable=False,DefaultValue=]' of member"状态"类型为"IMS.DAL"。Users_mast'不兼容"SqlServer.binary [Nullable = False, DefaultValue =,最大长度= 8000,FixedLength = True)"代码类型为'CodeFirstDatabaseSchema.Users_mast'的成员'status' .
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 server二进制?是否有sql server类型和。net类型之间的映射列表,特别是在EF Code-First的情况下?
任何帮助都是感激的。请帮助! !
将属性更改为:
[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; }
在我的情况下,所有列都设置正确,但Oracle Unmanaged Driver显然不总是加载到visual studio很正确。
我可以让它工作有时,但它经常在重新启动我的visual studio开发机器后失败。我在解决方案(MVC5 + EF + AngularJS +捆绑Web优化)中尝试了重建+重新加载T4模板和重新编译文件的组合。最后,这被证明是一个更直接的解决方案:
:错误2019:指定的成员映射无效。|,甲骨文社区[^]
- (a)打开Visual Studio帮助/关于Microsoft Visual Studio并单击OK按钮退出对话框
- 或 (b)在服务器资源管理器中打开要使用的连接