Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何强制实体框架对char、NCHAR、VARCHAR(1)和NVARCHAR(1)列使用字符串而不是char?_.net_Sql Server_Linq - Fatal编程技术网

.net 如何强制实体框架对char、NCHAR、VARCHAR(1)和NVARCHAR(1)列使用字符串而不是char?

.net 如何强制实体框架对char、NCHAR、VARCHAR(1)和NVARCHAR(1)列使用字符串而不是char?,.net,sql-server,linq,.net,Sql Server,Linq,我们有一个数据库表,当前有一个VARCHAR(1)列 我们偶尔会对此表进行更改,这需要我们重新生成DBML文件中的对象。我们对应的代码希望将该值作为字符串引用,但LINQ to SQL始终假定它是一个可为空的字符。为了避免这种情况,我们必须在DBML设计器中将列手动设置为字符串。我想防止我们的开发人员在这些类型的字段中意外地使用char而不是string 有没有办法强制实体框架为所有CHAR/NCHAR/VARCHAR(1)/NVARCHAR(1)字段假定字符串 如果没有办法做到这一点,我们可能

我们有一个数据库表,当前有一个
VARCHAR(1)

我们偶尔会对此表进行更改,这需要我们重新生成DBML文件中的对象。我们对应的代码希望将该值作为字符串引用,但LINQ to SQL始终假定它是一个可为空的字符。为了避免这种情况,我们必须在DBML设计器中将列手动设置为字符串。我想防止我们的开发人员在这些类型的字段中意外地使用char而不是string

有没有办法强制实体框架为所有
CHAR/NCHAR/VARCHAR(1)/NVARCHAR(1)
字段假定字符串

如果没有办法做到这一点,我们可能会将列更改为
VARCHAR(2)
或类似的内容。无论我们决定什么,我们都将传播到多个表,因为多个表使用这种类型的列定义。我们需要修改的栏目数量之多,正是阻碍我们在此时全面实施这一计划的原因


编辑:将“实体框架”更改为“LINQ到SQL”

我遇到了类似的问题。我通过使用POCO T4模板并修改模板以发出一个附加属性来解决这个问题,该属性在设置原始属性之前进行一些检查。T4模板可以通过使用命名约定来识别需要这样做的字段。这里有一个到我的博客的链接,我在这里更详细地描述了它是如何工作的

我想另一种方法是创建一个分部类,以类似的方式添加附加属性


我希望这有帮助……

我也有类似的问题。我通过使用POCO T4模板并修改模板以发出一个附加属性来解决这个问题,该属性在设置原始属性之前进行一些检查。T4模板可以通过使用命名约定来识别需要这样做的字段。这里有一个到我的博客的链接,我在这里更详细地描述了它是如何工作的

我想另一种方法是创建一个分部类,以类似的方式添加附加属性


我希望这有帮助……

这是EF 4还是EF 4.1?数据库优先,代码优先?VARCHAR(1)是毫无意义的—在实际字符串的顶部有两个字节的开销,所以这里使用2-3个字节—可能存储单个字符(或不存储)。对于任何短于5或10个字符的字符,请使用
CHAR(x)
——效率更高!我不理解“为了防止我们的开发人员在这些类型的字段中意外地使用char而不是string。”-根据定义,这些字段只能存储单个char。为什么开发人员意识到这一点是错误的,而不是他们看到可以存储字符串的东西,但是他们必须知道只在其中放置一个字符?@marc@Damien无论是
CHAR(1)
还是
CHAR
都不能存储空字符串-
VARCHAR(1)
string
都不能@我同意VARCHAR(1)是毫无意义的。我已经和我的同事讨论过这一点,他们同意将来不会创建这些类型的列。这是在EF 4还是4.1中?数据库优先,代码优先?VARCHAR(1)是毫无意义的—在实际字符串的顶部有两个字节的开销,所以这里使用2-3个字节—可能存储单个字符(或不存储)。对于任何短于5或10个字符的字符,请使用
CHAR(x)
——效率更高!我不理解“为了防止我们的开发人员在这些类型的字段中意外地使用char而不是string。”-根据定义,这些字段只能存储单个char。为什么开发人员意识到这一点是错误的,而不是他们看到可以存储字符串的东西,但是他们必须知道只在其中放置一个字符?@marc@Damien无论是
CHAR(1)
还是
CHAR
都不能存储空字符串-
VARCHAR(1)
string
都不能@我同意VARCHAR(1)是毫无意义的。我已经和我的同事讨论过这一点,他们同意今后不会创建这些类型的专栏。