相关疑难解决方法(0)

实体框架代码中的唯一约束优先

是否可以使用流畅的语法或属性在属性上定义唯一约束?如果没有,有哪些解决方法?

我有一个带有主键的用户类,但我想确保电子邮件地址也是唯一的.这是否可以直接编辑数据库?

解决方案(基于马特的答案)

public class MyContext : DbContext {
    public DbSet<User> Users { get; set; }

    public override int SaveChanges() {
        foreach (var item in ChangeTracker.Entries<IModel>())
            item.Entity.Modified = DateTime.Now;

        return base.SaveChanges();
    }

    public class Initializer : IDatabaseInitializer<MyContext> {
        public void InitializeDatabase(MyContext context) {
            if (context.Database.Exists() && !context.Database.CompatibleWithModel(false))
                context.Database.Delete();

            if (!context.Database.Exists()) {
                context.Database.Create();
                context.Database.ExecuteSqlCommand("alter table Users add constraint UniqueUserEmail unique (Email)");
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

entity-framework unique-constraint code-first

125
推荐指数
6
解决办法
6万
查看次数

检查约束实体框架

在EF中我可以添加一个检查约束,这样如果我的CustomerNotes实体有一个布尔"FollowUpRequired"属性,我强制用户在"FollowUpDate"属性中输入一个有效的未来日期?

entity entity-framework

14
推荐指数
2
解决办法
8500
查看次数

是否可以表达检查约束?

我正在使用Entity Framework 4.3进行代码优先开发,并且看起来似乎不可能通过属性注释或任何其他方式表达CHECK约束.我看到EF 5.0将添加对检查枚举的支持,但这并不是我在这里完成的.

举一个简单的例子,我想验证所有Person对象的名字都是"Bob"或"Harry",并且是5年,10年或30年.

public class Person
{
    [Required]
    [Check("Bob", "Harry")]  //yes, this attribute is imaginary
    public string FirstName { get; set; }

    [Required, Check(5, 30, 50)]  //check is still imaginary
    public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我可以运行一个alter脚本来添加这些约束,然后我可以滚动自己的check属性来执行验证,但是有没有办法在Entity Framework中实际表达非枚举的CHECK约束?

c# entity-framework entity-framework-4.3

9
推荐指数
2
解决办法
5776
查看次数