我花了相当多的时间来解决这个问题,但仍然无法弄清楚为什么EF团队使用Code First让生活如此艰难.
以下是一些示例:
我的POCO:
我想要的东西看起来像:
public class Post
{
public int Id {get; set;}
public string Text {get; set;}
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>()
.Property(p => p.Text)
.HasColumnType("nvarchar(max)");
}
Run Code Online (Sandbox Code Playgroud)
唯一有效的方法:
public class Post
{
public int Id {get; set;}
[StringLength(4000)]
public string Text {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
问题是,在第一种情况下,我尝试插入它给我的任何东西:Validation failed for one or more entities
第二种情况不适合我的商业模式.
我是唯一有这个问题的人吗?我该如何处理这件事?
当我尝试将列映射到我的模型类中的char数据类型时,我收到一个错误:
属性'[ColumnName]'不是'[ClassName]'类型的声明属性.使用Ignore方法或NotMappedAttribute数据批注验证是否未从模型中显式排除该属性.确保它是有效的原始属性.
EF Code First的有效原始类型是什么?
所以我有一个UserProfile模型类作为SimpleMembership的一部分.在其中我需要存储另一个类型的DB中存在的遗留标识符char(36)
.我喜欢把它改成像一个独特的标识更合理的东西,但这超出了今天的活动范围.
我当前的注释创建了一个列 nvarchar(36)
[StringLength(36)]
public string UserIdentifier{ get; set; }
Run Code Online (Sandbox Code Playgroud)
我想要一列char(36)
代替.这可能吗?
我有一个LINQ查询,它抓取它需要的所有数据并将其合并到一个数据传输对象中,一切正常但除非它将一个DTO的成员(这是一个char)设置为char值时抛出查询异常...
mscorlib.dll中发生了未处理的"System.ServiceModel.FaultException"类型异常
无法创建"System.Char"类型的常量值.在此上下文中仅支持基元类型或枚举类型.
请参阅下面的简化查询:
var result = (from c in db.Foster_Carers
where c.foster_carer_id == id
join fc in db.Individual_Carers on c.first_carer_id equals fc.individual_carer_id
select new FosterCarerPersonalInfoDTO
{
carer_title = fc.title,
carer_forenames = fc.forename,
carer_surname = fc.surname,
carer_gender = 'm'
}).SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)
将性别设置为'm'只是不起作用,从语法上来说它没关系,只是在执行查询时不行!可能是什么问题?