实体框架代码优先模型中的不可空虚拟虚拟

时间:2018-05-23 10:50:47

标签: c# .net entity-framework ef-code-first

我需要从我的网站的Entity Framework模型生成两个具有一对多关系的数据库表;博客和标签。博客可以包含许多标签,但标签只能属于一个博客。

我的博客模型包含ID属性(Guid)作为主键和Name属性(字符串)。相似性我的Tag模型由作为主键的ID属性(int)和Name属性(字符串)组成。 Tag模型还有一个虚拟属性Blog,它应该为Blog表的ID列生成一个外键。

以下是我的模型类的摘录:

public class Blog
{
    public Guid ID { get; set; }
    public string Name { get; set; }
}

public class Tag
{
    public int ID { get; set; }
    public string Name { get; set; }

    public virtual Blog Blog { get; set; }
}

使用代码优先创建数据库时,Tag表中的Blog_ID列允许插入null或随机GUID。如何使用代码优先方法强制它永远不允许空值或除现有有效博客ID之外的值?

3 个答案:

答案 0 :(得分:1)

您的类应声明类似于以下代码。

using System.ComponentModel.DataAnnotations;
suing System.ComponentModel.DataAnnotations.Schema

public class Tag
{
    public int ID { get; set; }
    public string Name { get; set; }
    [Required]
    [ForeignKey("BlogId")]
    public virtual Blog Blog { get; set; }

    public virtual Guid BlogId { get; set; };
}

答案 1 :(得分:0)

RequiredAttribute添加到您的房产中。

[Required]
public virtual Blog Blog { get; set; }

答案 2 :(得分:0)

您应该将此字段添加到Tag类:

[Required]
public Guid BlogId { get; set; }