sql-server - EFCodeFirst 和 SqlCe4 的唯一约束

标签 sql-server asp.net-mvc-3 ef-code-first

我正在使用 Entity Framework Code First 和 SqlCe4 编写 ASP.net MVC3 应用程序。

我一直在设计几个模型,并发现了一个很有趣的模型。这是我到目前为止所拥有的:

public class Preference
    {
        public int PreferenceId { get; set; }

        [Required]
        public int StudentId { get; set; }
        public virtual Student Student { get; set; }

        [Required]
        public int PresentationId { get; set; }
        public virtual Presentation Presentation { get; set; }

        [Required]
        public int Rank { get; set; }
    }

但是,我需要一个唯一的约束或索引,因为对于特定的学生,我希望他们必须有一个偏好列表,但每个学生的PresentationId 必须是唯一的。有没有办法通过 Code First 或某些验证属性来做到这一点?

这听起来像是我要沿着多对多关系的分支,以 Preference 对象作为中介,添加 Rank 属性。但是,我似乎找不到如何确保这些值是唯一的。最好的方法真的是手动向 EF 之外的数据库添加唯一索引吗?

最佳答案

目前(即 EF 4.1)EF 没有用于创建唯一索引的属性或配置机制。

但是,如果您使用数据库初始化程序,则可以手动创建它

public class MyInitializer : IDatabaseInitializer<MyContext>
{
    public void InitializeDatabase(MyContext context)
    {
        if (!context.Database.Exists() || !context.Database.ModelMatchesDatabase())
        {
            context.Database.DeleteIfExists();
            context.Database.Create();

            context.ObjectContext.ExecuteStoreCommand("CREATE INDEX IX_Preference_PresentationId ON Preference ( PresentationId )");
        }
    }
}

或者在初始化程序之外执行它。

关于sql-server - EFCodeFirst 和 SqlCe4 的唯一约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6727738/

相关文章:

SQL 将现有/重复的行插入表中但只更改一列值?

c# - 在没有 Flash 的情况下将实时音频流式传输到网站

javascript - 我应该在多大程度上强制 DOM 元素的 ID 的唯一性?

c# - EF 4.3.1 在 LinqToEntities 查询中包含继承的导航属性

c# - 在没有 Helper 属性的情况下一对一映射 EntityFramework

sql-server - 修改 Azure SQL 数据库中的文件最大大小

c# - 使用二进制搜索或并行编程在 C# 中搜索 SQL Server 数据库

sql-server - VS 2017 无法部署 SSIS SQL Server 2012

asp.net-mvc - 在MVC项目中从 Controller 访问服务层

c# - EntityFramework 不创建表