【问题标题】:Unique fields in table Fluent Api / Code First表 Fluent Api / Code First 中的唯一字段
【发布时间】:2013-05-19 11:21:34
【问题描述】:

我一直在寻找一种方法,例如在数据库中使用Fluent API / Code First 的唯一用户名。这甚至可以通过这些路线中的任何一条实现吗?

因为我找不到任何说明如何完成的教程或示例。

【问题讨论】:

    标签: ef-code-first entity-framework-5 unique-index


    【解决方案1】:

    您必须提供一个上下文初始化器并覆盖种子方法来初始化您的数据库。在那里,您可以使用 DbContext.Database.ExecuteSqlCommand 添加唯一索引。这是相同的示例代码。

    型号

    public class Relay  {
    
        //Scalar Properties
        private int _id;
        [Key]
        public virtual int Id {
            get { return _id; }
            set { SetField(ref _id, value, () => Id); }
        }
    
        private string _name;
        [MaxLength(100)]
        [Required]
        public virtual string Name {
            get { return _name; }
            set { SetField(ref _name, value, () => Name); }
        }
    
        //Other properties of Model
    }
    

    DBContext

    public class RelayContext : DbContext {
         public DbSet<Relay> Relays { get; set; }
    
        public RelayContext(string connectionString) : 
            base(connectionString) {
            Database.SetInitializer(new RelayContextInitializer());
        }
    }
    

    ContextInitializer

    public class RelayContextInitializer : CreateDatabaseIfNotExists<RelayContext> {
        protected override void Seed(RelayContext context) {
            context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX Uix_Relay_Name ON Relays(Name)");
        }
    }
    

    就是这样。您现在已经在中继表的名称字段上创建了一个唯一索引。

    【讨论】:

    • 嗨,我不能使用用 Code First 代替 Relay 创建的表吗?我不确定那应该做什么。不能直接调用ExecuteSqlCommand()吗?
    • Relays 是我使用的表的名称。用您的表名称替换它。索引创建是一次性工作,最好由上下文初始化器处理。
    猜你喜欢
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    相关资源
    最近更新 更多