【发布时间】:2013-08-14 16:59:10
【问题描述】:
我正在使用 EntityFramework - Code First,带有 POCO 类的 DBContext。
在运行时,我如何检测属性属于在数据库中生成的字段,标记为 .HasDatabaseGeneratedOption 、 .IsRowVersion(只读?)等。
我看了var xxx = Entity.GetType().GetProperty("ID").Get... ,没有运气。
public partial class OnMuhasebeContext : DbContext
{
public bool IsDatabaseGeneratedProperty <?>(...)
{
// Parameters :
// We know all poco classes of course
// also parameters can be instance type
}
}
更新:
请将“数据库生成”阅读为“由数据库生成值的字段”并在模型中标记以反映这一点。
这些属性都属于数据库生成的字段,并使用 Fluent API 标记为身份和 RowVersion。
public class POCOMap : EntityTypeConfiguration<POCO>
{
public POCOMap()
{
// Primary Key
this.HasKey(t => t.ID);
this.Property(t => t.RowVersion)
.IsFixedLength()
.HasMaxLength(8)
.IsRowVersion();
}
}
重点:如何在模型或代码优先模型中获取属性,使用 Fluent API 或 Data Annotions。数据库本身并不重要,就像实体框架背后的哲学一样。
【问题讨论】:
-
嗯,你说你使用的是 Code First。你怎么会有数据库生成的属性?或者你的意思是你有数据库需要的字段?
-
请查看更新部分。 RowVersion-Timestamp 字段的值由数据库在更新时设置。自动增量标识字段值由数据库在插入时给出。
标签: c#