Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Configuration 是否有方法使用EF 4.2 codefirst配置,使用设置的maxlength值覆盖nvarchar(最大值)?_Configuration_Entity Framework 4.1_Ef Code First_Conventions_Maxlength - Fatal编程技术网

Configuration 是否有方法使用EF 4.2 codefirst配置,使用设置的maxlength值覆盖nvarchar(最大值)?

Configuration 是否有方法使用EF 4.2 codefirst配置,使用设置的maxlength值覆盖nvarchar(最大值)?,configuration,entity-framework-4.1,ef-code-first,conventions,maxlength,Configuration,Entity Framework 4.1,Ef Code First,Conventions,Maxlength,默认情况下,EF 4.2 codefirst将字符串属性后面的数据库列设置为nvarchar(max) 单独(每个属性)我可以通过指定[MaxLength(512)]属性来覆盖此约定 有没有一种方法可以全局应用这样的配置?modelbuilder上的配置api似乎只允许每个实体覆盖,而modelbuilder上的约定api只允许删除。请参阅此项。否没有可用的全局配置。自定义约定在CTP阶段首先从EF代码中删除。我认为您可以这样做。在模型表中属性的正上方添加StringLength属性。就像下面一

默认情况下,EF 4.2 codefirst将字符串属性后面的数据库列设置为nvarchar(max)

单独(每个属性)我可以通过指定
[MaxLength(512)]
属性来覆盖此约定


有没有一种方法可以全局应用这样的配置?modelbuilder上的配置api似乎只允许每个实体覆盖,而modelbuilder上的约定api只允许删除。请参阅此项。

否没有可用的全局配置。自定义约定在CTP阶段首先从EF代码中删除。

我认为您可以这样做。在模型表中属性的正上方添加StringLength属性。就像下面一样。(请记住,您需要包括使用System.ComponentModel.DataAnnotations;)

更新

  • 首先,不能在nvarchar(MAX)列上创建索引。可以使用全文索引,但不能在列上创建索引以提高查询性能

  • 从储存角度来看,当N<4000时,nvarchar(最大)和nvarchar(N)之间没有差异。数据存储在行中或不适合时存储在行溢出页上。当您使用nvarchar(max)并存储超过4000个字符(8000字节)时,SQL Server将使用不同的方法存储数据—与旧的文本数据类型类似—它存储在LOB页面中

  • 性能方面-同样,对于更多的io操作->性能下降。如果是这种情况,您可以尝试进行垂直分区,并将nvarchar字段移动到不同的表中


您好,我正在寻找一个全球公约。全球公约只允许使用nvarchar(MAX)。您所能做的就是单独重写它,这就是它应该做的。如果您希望项目中的所有字符串属性都具有固定长度,那么为什么不添加一个函数或类来检测模型类中的字符串属性并为您附加StringLenth属性呢?这是默认的全局约定,我希望覆盖它并为我的项目设置我自己的。nvarchar(MAX)有缺点,我不想影响我的项目,如果我需要在未来的数据库级别对其进行优化,即不对nvarchar(MAX)列进行索引。我已根据您对nvarchar(MAX)hmmm的担忧更新了我的答案。。。我将使用reflector进行查看,看看是否有任何方法可以使用maxlength的复制品实施黑客攻击。
    [StringLength(160)]
    public string Title { get; set; }