将选项值设置为实体属性

时间:2018-02-18 04:47:08

标签: database entity-framework-core modeling

我来自Django,在定义模型时使用Django的ORM,我可以设置选项,例如:

class MyModel(Model):

    CHOICES = (...)   # List of choices here
                      # it has tu be a 2-tuple list
                      # but that's is not the point right now.

    choice = IntegerField(choices=CHOICES)  # Set the choices.

现在,当MyModel用于创建实例时,属性(属性)choice只能包含CHOICES中定义的值。

EntityFrameworkCore-2.0 有这样的内容吗?

这是可能的吗?

class MyEntity
{
   [choices=EnumDefiningChoices] 
   property enum choices { get; set; } 
}

2 个答案:

答案 0 :(得分:1)

属性可以有一个定义的值,intstring等,以便存储在数据库中。

一种方法是使用2个表,一个用于您的实体,另一个用于选择。

<强> myEntity所

public class MyEntity
{
    public int Id { get; set; }

    // all the other properties

    public int ChoiceId { get; set; } // Here is the refference for the choice
    public virtual Choice Choice { get; set; }
}

<强>选择

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

正如您所见,ChoiceId仅允许Choice表中的值。

但是,如果您想使用Enum,则没有使用EF的“阻止”机制,这必须在应用程序级别实现。

答案 1 :(得分:0)

确实有办法!

使用EF&gt; 6你可以这样做:

public enum Option 
{
    option_1 = 1,
    option_2,
    option_3    
}

class SomeEntity
{
    public Option Option { get; set; }
}

您可以使用以下命令获取枚举选项名称:

var option_name = Option.GetName(typeof(Option), some_entity.option_2);
Console.WriteLine(option_name);

<强>参考

Working with Enumerated Values in Entity Framework

Enum.GetName Method (Type, Object)