2014-01-22 49 views
0

我正在使用EF与一个asp.net mvc项目,我正在使用c#。如何使用实体框架控制数据库参数

我现在忙于设计数据模型,我想知道是否有方法来控制不仅在模型对象中的每个属性的某些属性,而且在持久存储(我的情况下是MS SQL)中。

这里是我当前的领域模型的一个例子。

public class Network 
{ 
    [Required] 
    public int networkID { get; set; } 

    [Required] 
    [StringLength(30, MinimumLength = 3)] 
    [DisplayName("Name")] 
    public string name { get; set; } 

    [Required] 
    [Range(0, 7)] 
    [DisplayName("Start Code")] 
    public int startCode { get; set; } 

    [Required] 
    [DisplayName("Frequency (Mhz)")] 
    public decimal frequency { get; set; } 
    //public virtual List<Block> blocks { get; set; } 

    //The number of used up blocks. Will increase by the block size of every newly created block. 
    [Required] 
    [Range(0, 65535)] 
    public int blockCounter { get; set; } 

    //Number of blocks within the network. 
    [Range(0,65535)] 
    public int noOfBlocks { get; set; } 
} 

现在的问题与此:

这条线:

[Range(0,65535)] 
public int noOfBlocks { get; set; } 

这是否会actully限制在数据库中该尺寸的诠释?或者这纯粹是为了验证的目的?

如果不是我怎么能确定有关特定属性的某些属性,如:

  • 如果这是一个主键?
  • 设置默认值。
  • 指定字段的长度或范围。
  • 定义它是否可以为null。

基本上MS SQL提供程序创建条目时的功能。

回答

1

RangeAttribute不控制在数据库中的值的范围。它将列创建为一个int列,接受int类型可以接受的所有整数。如果您创建存储过程来设置此列的值,则不会根据此范围进行验证。如果实体框架在列上创建一个约束,那将会很好,但是这不会发生。

RangeAttribute在数据存储中持久存储实体之前验证您的数据。

+0

谢谢,很好地解释了我的问题的部分。好吧,但现在如果我使用数据注解这样:'[MaxLength(10),MinLength(5)] public string BloggerName {get;组; }然后呢会执行验证和持久性验证吗? – Zapnologica

+0

同样,这只会在插入或更新实体之前验证您的数据。在ASP.NET脚手架的情况下,数据将通过使用相同的数据注释在页面级别进行验证。 –

相关问题