【问题标题】:Entity Framework Code First Casting Columns实体框架代码优先铸造列
【发布时间】:2011-10-18 01:38:04
【问题描述】:
我有课
public class Foo
{
public int UserId { get; set; }
}
我正在使用代码优先的流利映射将其映射到数据库。
Property(i => i.UserId)
.HasColumnName("userno");
唯一的问题是 userno 实际上是数据库中的一个 char(10)。我该如何转换或转换这种类型?因为我目前收到此错误。
“Foo”上的“UserId”属性无法设置为“String”值。
您必须将此属性设置为“Int32”类型的非空值。
谢谢
【问题讨论】:
标签:
c#
entity-framework
mapping
entity-framework-4.1
code-first
【解决方案1】:
实体框架不支持映射中的类型转换,因此您的场景中唯一有效的映射属性是:
public class Foo
{
public string UserId { get; set; }
}
如果你也想要int 属性,你必须这样做:
public class Foo
{
public string UserId { get; set; }
public int UserIntId
{
get { return Int32.Parse(UserId); }
set { UserId = value.ToString(); }
}
}
并将其添加到您的映射中:
Ignore(i => i.UserIntId);
您可以使用 UserId 属性的可访问性,但请注意,如果您的映射实际看到该属性,可访问性也会影响。如果没有,您将根本没有映射UserId。