2
我有我使用的是Azure的移动服务下面的代码,第一实体框架代码:如何在EF code-first和Azure中创建默认约束?
public class BookContext : DbContext
{
private const string connectionStringName = "Name=MS_TableConnectionString";
public BookContext() : base(connectionStringName) { }
// The collections queried directly.
public DbSet<Book> Books{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Standard code to add the "service" columns such as CreatedAt, UpdatedAt, and Deleted.
modelBuilder.Conventions.Add(
new AttributeToColumnAnnotationConvention<TableColumnAttribute, string>(
"ServiceTableColumn", (property, attributes) => attributes.Single().ColumnType.ToString()));
// Add a default value 0 on the Deleted column. The following code does not work.
modelBuilder.Entity<Book>()
.Property(p => p.Deleted)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed);
}
}
如上所述,该代码应该被删除的列上添加一个默认约束,但它确实不做任何事情。我希望实现与EF代码优先级相同的以下SQL语句:
ALTER TABLE dbo.Books ADD CONSTRAINT DF_BooksDeleted DEFAULT 0 FOR Deleted
显然,我必须做错了什么。任何人都可以将我指向正确的方向吗?
由于布鲁斯。你的代码运行良好。实际上,我只需要添加EntityTableSqlGenerator并按原样离开OnModelCreating。无论如何,已创建“已删除”列的默认约束。为什么我需要为OnModelCreating中的已删除列设置默认值? – ata6502
我以为'Deleted'列没有默认约束,谢谢提醒我。要为自定义列设置默认值,可以参考其余部分。 –
让我澄清一下:MyEntityTableSqlGenerator的用途是设置Default约束的值。 OnModelCreating的目的是创建Default约束。这是对的吗?如果是这样,我可能已经运行创建了默认约束的OnModelCreating。 – ata6502