ShortGuid与实体框架

时间:2014-12-05 21:05:35

标签: .net entity-framework guid

我从NuGet安装了ShortGuid,并希望将它用作我桌子的钥匙。我想将22-char字符串存储在数据库而不是Guid中,因此在调试时更容易找到记录。如何让Entity Framework创建此列?

我尝试添加:

public ShortGuid NewCol { get; set; }

但没有添加任何专栏。我试过了:

[Column(TypeName = "nvarchar")]
[MaxLength(22), MinLength(22), StringLength(22)]
public ShortGuid NewCol { get; set; }

但仍然没有专栏。据推测,EF不明白我想要做什么,所以它只是忽略了专栏?如果我只使用Guid,它可以正常工作:

public Guid NewCol { get; set; }

我想我可以使用22-char字符串列,但理想情况下我想使用ShortGuid类型。这可能吗?

2 个答案:

答案 0 :(得分:0)

将其映射为复杂类型,但不能将其用作主键

答案 1 :(得分:0)

我过去经历过与Entity Framework类似的事情。据我所知,列的类型不能是复杂类型。这是实体框架的限制(但我对此并不是100%肯定)。

我将分享我在这种情况下通常做的事情,即使我知道我的答案更多的是解决方法,而不是对你的问题的正确答案。

我在我的类中创建了2个属性:1)将充当数据库中的列的属性和2)我最初打算保留在我的类中的属性。以下代码片段将解释我要做的事情。

Event.cs:

namespace MyContext.Model 
{
    public partial class Event 
    {
        [Key]
        public int EventId { get; set; }

        public string AccessTokenStr { get; set; }

        // [NotMapped] tells Entity Framework to not make a column for the following property
        [NotMapped]
        public ShortGuid AccessToken 
        {
            get
            {
                return new ShortGuid(AccessTokenStr);
            }

            set
            {
                AccessTokenStr = value.ToString();
            }
        }
    }
}

希望这有帮助。