首页 新闻 会员 周边 捐助

EF4.3 中DatabaseGeneratedOption.Identity不起作用???EF早就支持枚举了???

0
悬赏园豆:20 [已解决问题] 解决于 2013-05-25 10:30

属性为:

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 枚举能够映射到数据列。可以用吗???

lifencheng的主页 lifencheng | 初学一级 | 园豆:186
提问于:2012-04-27 15:12
< >
分享
最佳答案
0

Entity Framework 4.3 不支持枚举

收获园豆:10
dudu | 高人七级 |园豆:30778 | 2012-04-27 16:26
其他回答(2)
0

属性为:

public  System.Guid ID { get; set; }

注册为:

HasKey(entity => entity.ID)
                .Property(entity => entity.ID)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

这个应该可以啊,另外的确实不行的。

收获园豆:10
ChatinCode | 园豆:2272 (老鸟四级) | 2012-04-27 16:48

我也想应该可以,但实际上是不行的,对了,我是在基类中定义GUID主键,基类不生成表,派生类生成表使用TPC方式,不知道是不是和这个有关,

支持(0) 反对(0) lifencheng | 园豆:186 (初学一级) | 2012-04-27 16:54

@lifencheng: 这个我刚才试了一下,可以的。我再看看TPC方式。

支持(0) 反对(0) ChatinCode | 园豆:2272 (老鸟四级) | 2012-04-27 16:57

我也想应该可以,但实际上是不行的,对了,我是在基类中定义GUID主键,基类不生成表,派生类生成表使用TPC方式,不知道是不是和这个有关,

EnumDataType 是我想多了,objectdatasource中用的吧,不明白EF要等到5才行

支持(0) 反对(0) lifencheng | 园豆:186 (初学一级) | 2012-04-27 16:58

@lifencheng: 你的Entity类的定义是怎么样的?

支持(0) 反对(0) ChatinCode | 园豆:2272 (老鸟四级) | 2012-04-27 17:01

@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的版本问题?

支持(0) 反对(0) lifencheng | 园豆:186 (初学一级) | 2012-04-27 20:23

http://connect.microsoft.com/VisualStudio/feedback/details/661210/entity-framework-4-1-rtw-code-first-tpc-inheritance-identity-bug  在这里看到了,又要等EF5.0了,自从把Nhibernate转为EF就有了无尽的烦恼。

支持(0) 反对(0) lifencheng | 园豆:186 (初学一级) | 2012-04-28 08:45
0

做个扩展方法搞定,虽然是很难看的方法。

TPC 方式下,对于Guid,HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)生成的都是0,只有显式定义才能在数据库生成默认值newid(),而对于非主键的DateTime来说,就是定义了也没用(如果要由数据库生成还是要定义),只能在SetInitializer中再修改了。

lifencheng | 园豆:186 (初学一级) | 2012-04-29 15:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册