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