我从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类型。这可能吗?
答案 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();
}
}
}
}
希望这有帮助。