错误2019:使用Entity Framework Code First指定的成员映射无效

3
我正在实施Entity Framework Code-First方法,在我的项目中遇到了问题。
错误详情:18,12) : error 2019: 指定的成员映射无效。在类型为'IMS.DAL.Users_mast'的成员'status'的类型为'Edm.Byte[Nullable=False,DefaultValue=]'与在类型为'CodeFirstDatabaseSchema.Users_mast'的成员'status'的类型为'SqlServer.binary[Nullable=False,DefaultValue=,MaxLength=8000,FixedLength=True]'不兼容。
我的代码: 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();
    }

运行时,我遇到了上述错误。我理解这是由于状态字段被设置为byte,但未被映射为二进制所致。

那么,我该怎么样才能将sql server中的列设置为二进制呢?在EF Code-First中,是否有SQL Server类型和.NET类型之间的映射列表?

感谢任何帮助。请帮帮我!!!


你为什么想要在代码中以字节形式存储true/false值,并在数据库中以二进制形式存储?bool和bit有什么问题吗? - Rhumborl
2个回答

3
将您的属性更改为:
[Column(TypeName = "bit")]
public bool status { get; set; }

bool是C#中专门用来存储true和false值的数据类型。bool数据类型映射到SQL bit 数据类型。

SQL中的binary数据类型用于存储二进制数据,例如文件或图片。如果您想要将其映射到C#属性,则可以使用byte[]数据类型(字节数组)。在这种情况下,代码可能如下所示:

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

这绝对是有用的信息。实际上,我想在数据库中存储1或0。为此,我可以使用int,但我不想使用int。如果我使用位类型,它会将值存储为true/false还是1/0? - Agnib
位是将值存储为1或0的最小数据类型。它实际上只有一个比特(开或关,二进制中为1或0)。 - Maurits van Beusekom
此外,您现在使用的字节由8个位组成。 - Maurits van Beusekom
4
你应该接受这个答案,并给予Maurits他的25点声望奖励。 - John Castleman

0
在我的情况下,所有列都被正确设置了,但是Oracle Unmanaged Driver显然并不总是正确地加载到Visual Studio中。
我有时可以让它工作,但经常在重新启动我的Visual Studio开发机器后失败。我尝试了重建+重新加载T4模板和重新编译解决方案中的文件(MVC5 + EF + AngularJS + Bundled Web optimization)的组合。最终,这证明是一个更为简单的解决方案:
这个: Error 2019: Member Mapping specified is not valid. | Oracle Community[^]
(a) 打开Visual Studio Help/About Microsoft Visual Studio并单击OK按钮退出对话框 或者 (b) 在服务器资源管理器中打开要使用的连接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接