0
我正在从MySql迁移到SQL Server,并使用代码优先在C#中重新编写一个网站(我是/我是一个vb.net家伙)。为什么数据库第一类不同于我的代码第一类
我写了下面的类
namespace DomainClasses.GeographyDb
{
public class PostalCode
{
[Key]
public int PostalCodeId { get; set; }
[Required]
[DataType(DataType.PostalCode)]
public string PostCode { get; set; }
[Required, ForeignKey("City")]
public int CityId { get; set; }
[Required, ForeignKey("TimeZone")]
public int TimeZoneId { get; set; }
[Required, MaxLength(30)]
public string AreaRegionPhonePrefixCode { get; set; }
[MaxLength(10)]
public string TaxRegionCode { get; set; }
public virtual City City { get; set; }
public virtual TimeZone TimeZone { get; set; }
}
我想看看有什么实体框架会写,如果它正在创建的类,所以我创建了一个测试项目,并首先使用代码数据库选项我进口的现有数据库与我为自定义类编写的字段完全相同。
这是它的产物;
namespace CodeFirstCreationTest
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
public partial class postalcode
{
public long PostalCodeId { get; set; }
[Required]
[StringLength(10)]
public string PostCode { get; set; }
public long CityId { get; set; }
public long TimeZoneId { get; set; }
[Required]
[StringLength(10)]
public string AreaRegionPhonePrefixCode { get; set; }
[StringLength(10)]
public string TaxRegionCode { get; set; }
public virtual city city { get; set; }
public virtual timezone timezone { get; set; }
}
}
我对这些差异有一些问题;
为什么实体框架将所有
using
语句放在命名空间声明中?我以为他们总是在外面,之前的代码StringLength
是一个数据验证注释。为什么实体框架将该属性放在属性上,这不是用于UI验证的吗?现在我想到了它,我总是在类上放置Required
属性,是否也是数据验证注释,而不是数据库注释?它使用流畅的API和
modelbuilder
创建了一个数据库类。注释类属性还是使用OnModelCreating
方法中的modelBuilder
更好?为什么实体框架使这个类变得部分,显然它生成的所有类都是局部的?
您对#2的回答没有对我在发布后发现的内容进行调整 – dinotom 2014-12-27 15:16:14
MaxLength用于实体框架来决定创建数据库时字符串值字段的大小。 来自MSDN: 指定属性中允许的数组或字符串数据的最大长度。 StringLength是将用于验证用户输入的数据注释。 来自MSDN: 指定数据字段中允许的字符的最小和最大长度。 – dinotom 2014-12-27 15:16:44
嗯,我想你问过Required和StringLength是数据库注释还是数据验证注释。也许我误解了。 – Phoenix 2014-12-27 21:43:55