实体框架5代码优先 - 不可为空的外键字段

时间:2013-08-06 07:33:43

标签: asp.net entity-framework ef-code-first entity-framework-5 fluent

我是Entity Framework的新手,即将使用EF5 Code First开始一个新的ASP.NET MVC项目。

我注意到在尝试使用EF时,在我的数据库中为我自动生成的外键字段允许NULL,我想知道如何在代码中配置内容,因为它不允许这些字段的空值?

示例(为简洁起见编辑):

public class Shop
{
    int Id { get; set; }
    string Name { get; set;

    // Navigation Property.
    Certificate Certificate { get; set; } // ******
}

public class Certificate
{
    int Id { get; set; }
    string Descrip { get; set; }
}

我突出显示的导航属性会自动在数据库的Shop表中生成一个名为Certificate_Id的字段,但它允许NULL,我想指定它不应该允许NULL。

如何使用Fluent API执行此操作?

3 个答案:

答案 0 :(得分:2)

试试这样:

public class TempContext : DbContext
{
    public DbSet<Shop> Shops { get; set; }
    public DbSet<Certificate> Certificates { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Shop>().HasRequired(x => x.Certificate);
    }
}

答案 1 :(得分:1)

您可以使用Required属性根据需要标记属性。

MSDN

以下是您的示例:

public class Shop
{
    int Id { get; set; }
    string Name { get; set;

    [Required]
    Certificate Certificate { get; set; }
}

Here是对不同注释的解释。

答案 2 :(得分:0)

试试这个:

public class Shop
{
    int Id { get; set; }
    string Name { get; set; }

    [Required]
    int CertId { get; set; }

    // Navigation Property.
    [ForeignKey("CertId")]
    Certificate Certificate { get; set; } // ******
}

public class Certificate
{
    int Id { get; set; }
    string Descrip { get; set; }
}