2014-01-22 47 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腳手架的情況下,數據將通過使用相同的數據註釋在頁面級別進行驗證。 –

相關問題