我正在从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; }
}
}
我对差异有很多疑问;
为什么Entity Framework将所有using
语句放在命名空间声明中?我以为他们总是在外面和代码之前
StringLength
是一个数据验证注释。为什么Entity Framework将该属性放在属性上,是不是用于UI验证?现在我想起来了,我总是把Required
属性放在类上,那是一个数据验证注释,而不是数据库注释吗?
它使用流畅的API和modelbuilder
创建了一个数据库类。是否更好地注释类属性或使用modelBuilder
方法中的OnModelCreating
进行注释?
为什么实体框架使这个类变得局部,显然它所生成的所有类都是部分的?
答案 0 :(得分:0)