属性为:
public System.Guid ID { get; set; }
注册为:
HasKey(entity => entity.ID)
.Property(entity => entity.ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
生成为 0000-0000-00000-00000
如果属性为
public DateTime CreateTime { get; set; }
Property(entity => entity.CreateTime)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
则干脆报datetime2 转为 datetime错误。
在System.ComponentModel.DataAnnotations中有一个EnumDataType,明确写着使 .NET Framework 枚举能够映射到数据列。可以用吗???
Entity Framework 4.3 不支持枚举
属性为:
public System.Guid ID { get; set; }
注册为:
HasKey(entity => entity.ID)
.Property(entity => entity.ID)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
这个应该可以啊,另外的确实不行的。
我也想应该可以,但实际上是不行的,对了,我是在基类中定义GUID主键,基类不生成表,派生类生成表使用TPC方式,不知道是不是和这个有关,
@lifencheng: 这个我刚才试了一下,可以的。我再看看TPC方式。
我也想应该可以,但实际上是不行的,对了,我是在基类中定义GUID主键,基类不生成表,派生类生成表使用TPC方式,不知道是不是和这个有关,
EnumDataType 是我想多了,objectdatasource中用的吧,不明白EF要等到5才行
@lifencheng: 你的Entity类的定义是怎么样的?
@ChatinCode:
public class BaseEntity {
public override bool Equals(object obj)
{
if (this == obj) return true;
BaseEntity entity = obj as BaseEntity;
if (entity == null) return false;
if (!this.GetType().Equals(obj.GetType())) return false;
if (!ID.Equals(entity.ID)) return false;
return true;
}
public override int GetHashCode()
{
return base.GetHashCode();
}
public BaseEntity()
{
}
[DataMember]
public System.Guid ID { get; set; }
[DataMember]
[Timestamp]
public byte[] Version { get; set; }
[DataMember]
public DateTime CreateTime { get; set; }
[DataMember]
public DateTime ModifyTime { get; set; }
}
[DataContract]
public class Account: BaseEntity
{
[DataMember]
[Required(ErrorMessage = @"类型不能为空")]
public string ValueType { get; set;}
[DataMember]
[StringLength(800, ErrorMessage = @"字符值最大长度为800个字符")]
public string DefaultValue { get; set; }
[DataMember]
[StringLength(800, ErrorMessage = @"字符值最大长度为800个字符")]
public string Value { get; set; }
}
看不出来Entity的定义有什么不同? 会不会是 EF的版本问题?
http://connect.microsoft.com/VisualStudio/feedback/details/661210/entity-framework-4-1-rtw-code-first-tpc-inheritance-identity-bug 在这里看到了,又要等EF5.0了,自从把Nhibernate转为EF就有了无尽的烦恼。
做个扩展方法搞定,虽然是很难看的方法。
TPC 方式下,对于Guid,HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)生成的都是0,只有显式定义才能在数据库生成默认值newid(),而对于非主键的DateTime来说,就是定义了也没用(如果要由数据库生成还是要定义),只能在SetInitializer中再修改了。