EntityFramework数据库第一 – 类型映射 – 将SQL中的二进制(8)映射到C#中的int

在SQL内部我有一个主键为二进制(8)的表.当我使用数据库中的更新模型将该表添加到我的模型时,我可以看到此列具有type = Binary

《EntityFramework数据库第一 – 类型映射 – 将SQL中的二进制(8)映射到C#中的int》

在C#中,我将该列作为byte [].

我可以将该列映射到int吗?

我知道我可以在SQL中使用CAST创建一个视图:

SELECT
    Client_Id,
    CAST(Client_Id AS INT) AS NewClient_Id,
    * /*other columns*/
FROM
    dbo.Clients

但这不是一个解决方案,因为我必须能够写,而不仅仅是从那个表中读取.我知道我可以为插入创建存储过程,但我想避免这种情况.

我是EntityFramewor 6.1.3.

最佳答案 您有3种不同的解决方案

x存储过程但您不需要它们.

x将未映射的属性添加到您的类.此解决方案的最大问题是您无法使用未映射的属性进行查询.您必须将所有数据读取到客户端,然后在客户端上的非映射属性上应用条件(因此您的应用程序不可伸缩).

[NotMapped]
public long LongClientId
{
    get { return BitConverter.ToInt64(this.ClientId, 0); }
    set { this.ClientId = BitConverter.GetBytes(value); }
}

此查询无效

context.MyDbSet.Where(m => m.LongClientId == 12).ToList();

你需要以这种方式改变它

context.MyDbSet.ToList().Where(m => m.LongClientId == 12);

此查询的结果是您将所有表的记录(从dbms传输到您的应用程序)加载到列表中而不是您获取所需的记录.

x创建视图(可能是索引视图)并使用INSTEAD OF触发器.

点赞