• C#字段属性设置


    键?指的是主键吗?,默认会有主键吗?
    因为实体框架要求必须要有一个键属性。您可以使用键注释来指定要将哪一个属性用作 EntityKey。
    publicclass Blog
    {
    [Key]
    public int PrimaryTrackingKey { get;set; }
    public string Title { get; set; }
    public string BloggerName { get;set; }
    public virtual ICollection Posts { get;set; }
    }
    如果您在使用Code First 的数据库生成功能,则Blog 表将具有名为 PrimaryTrackingKey 的主键列,该列默认情况下还定义为 Identity。

    必需

    [Required]
    publicstring Title { get;set; }
    MaxLength 和MinLength
    [MaxLength(10), MinLength(5)]
    publicstring BloggerName { get;set; }

    NotMapped 不映射到数据库的属性,可以定义为新属性,而不是直接从数据库当中取出
    [NotMapped]
    publicstring BlogCode
    {
    get
    {
    returnTitle.Substring(0, 1) + ":" +BloggerName.Substring(0, 1);
    }
    }

    ComplexType和外键有什么区别?会在数据库当中显示吗? BlogDetails 作为 Blog 类中的一个属性,将作为 Blog 对象的一部分被跟踪
    [ComplexType]
    publicclass BlogDetails
    {
    public DateTime? DateCreated { get;set; }
    [MaxLength(250)]
    public string Description { get;set; }
    }

    publicclass BlogDetails
    {
    public DateTime? DateCreated { get;set; }

    [MaxLength(250)]
    public string Description { get;set; }
    }

    ConcurrencyCheck 什么意思?

    [ConcurrencyCheck, MaxLength(10),MinLength(5)]
    publicstring BloggerName { get;set; }

    TimeStamp 什么意思?
    [Timestamp]
    publicByte[] TimeStamp { get;set; }

    DatabaseGenerated 什么意思?
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    publicDateTime DateCreated { get; set; }

    指定表名和列名
    [Table("InternalBlogs",Schema="dbo")]
    publicclass Blog

    Column 注释更适于用来指定被映射列的特性。您可以规定名称、数据类型甚至列出现在表中的顺序。下面是 Column 特性的示例。
    [Column("BlogDescription",TypeName = "ntext")]
    publicString Description { get; set; }

    来源: http://blog.csdn.net/gentle_wolf/article/details/14004345

    关系特性:InverseProperty和ForeignKey?

    使用Fluent API 配置/映射属性和类型
    简介
    通常通过重写派生DbContext 上的OnModelCreating 方法来访问Code First Fluent API。

    属性映射
    Property 方法用于为每个属于实体或复杂类型的属性配置特性。
    Property 方法用于获取给定属性的配置对象。配置对象上的选项特定于要配置的类型;例如,IsUnicode 只能用于字符串属性。
    modelBuilder.Entity()
    .Property(e => e.EquipmentStandardName)
    .IsUnicode(true);

    配置主键
    要显式将某个属性设置为主键,可使用 HasKey 方法。在以下示例中,使用了 HasKey 方法对 OfficeAssignment 类型配置 InstructorID 主键。
    modelBuilder.Entity().HasKey(t =>t.InstructorID);
    配置组合主键
    以下示例配置要作为Department 类型的组合主键的DepartmentID 和 Name 属性。
    modelBuilder.Entity().HasKey(t => new { t.DepartmentID, t.Name });
    关闭数值主键的标识

    下示例将DepartmentID 属性设置为System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.None,以指示该值不由数据库生成。
    modelBuilder.Entity().Property(t =>t.DepartmentID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    指定属性的最大长度

    在以下示例中,Name属性不应超过 50 个字符。如果其值超过 50 个字符,则出现 DbEntityValidationException 异常。如果 Code First 基于此模型创建数据库,它还会将 Name 列的最大长度设置为50 个字符。
    modelBuilder.Entity().Property(t =>t.Name).HasMaxLength(50);
    将属性配置为必需
    modelBuilder.Entity().Property(t =>t.Name).IsRequired();
    指定不将CLR 属性映射到数据库中的列

    modelBuilder.Entity().Ignore(t => t.Budget);
    将CLR 属性映射到数据库中的特定列
    如果您选择不对CLR 类型定义外键,但希望指定它在数据库中应使用的名称,请编码如下:
    modelBuilder.Entity()
    .HasRequired(c => c.Department)
    .WithMany(t => t.Courses)
    .Map(m => m.MapKey("ChangedDepartmentID"));
    配置字符串属性是否支持Unicode 内容
    默认情况下,字符串为Unicode(SQLServer 中的nvarchar)。您可以使用IsUnicode 方法指定字符串应为varchar 类型。
    modelBuilder.Entity()
    .Property(t => t.Name)
    .IsUnicode(false);
    配置数据库列的数据类型
    modelBuilder.Entity()
    .Property(p => p.Name)
    .HasColumnType("varchar");
    配置复杂类型的属性
    对复杂类型配置标量属性有两种方法。
    可以对ComplexTypeConfiguration 调用Property。
    modelBuilder.ComplexType

    ()
    .Property(t => t.Location)
    .HasMaxLength(20);

    也可以使用点表示法访问复杂类型的属性。
    modelBuilder.Entity()
    .Property(t => t.Details.Location)
    .HasMaxLength(20);

    定义DbSet
    DbContext 使用DbSet 属性 DbSet有什么作用?
    Code First 示例中显示的常见情况是让 DbContext 为模型实体类型使用公共自动 DbSet 属性。例如:
    publicclass BloggingContext: DbContext
    {
    public DbSetBlogs { get; set;}
    public DbSetPosts { get; set;}
    }

    使用code First模式创建数据模型,是否还需要Fluent API,怎样直接建立model,然后使用

  • 相关阅读:
    尖峰冲击测试(spike Testing)
    mysql返回记录的ROWNUM(转)
    SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较
    JUnit编写单元测试代码注意点小结
    Linux下Tomcat的启动、关闭、杀死进程
    linux下oracle11g R2的启动与关闭监听、数据库
    linux下使用yum安装mysql详解
    VC++ 实现文件与应用程序关联
    C++ 去掉字符串首尾的 x20 字符
    VC++ 线程同步 总结
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5770008.html
Copyright © 2020-2023  润新知