阿修--一直在自我修炼,希望能得到百年道行

湖南微软开发者俱乐部

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  46 随笔 :: 3 文章 :: 49 评论 :: 65793 阅读
< 2025年4月 >
30 31 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 1 2 3
4 5 6 7 8 9 10

2013年8月19日

一个影片信息Clips表,四个字段:clipId,clipName,fileSize,fileName

 

方案一:

    [Table("Clips")]
    public class Clip
    {
        public Clip()
        {
            File = new ClipFile();
        }

        [Key]
        [Column("clipId")]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }

        [Column("clipName")]
        public string Name { get; set; }

        public ClipFile File { get; set; }
    }

    [ComplexType]
    public class ClipFile
    {
        [Column("fileSize")]
        public string Size { get; set; }

        [Column("fileName")]
        public string Name { get; set; }
    }

缺点:ClipFile不会延迟加载,无论你ClipFile申明是否为virtual的。

方案二:

 

[Table("Clips")]
    public class Clip
    {
        [Key]
        [Column("clipId")]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [ForeignKey("FileOf")]
        public int Id { get; set; }

        [Column("clipName")]
        public string Name { get; set; }

        //[Required]
        public virtual ClipFile FileOf { get; set; }
    }

    [Table("Clips")]
    public class ClipFile
    {
        [Key]
        [Column("clipId")]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [ForeignKey("ClipOf")]
        public int Id { get; set; }

        [Column("fileSize")]
        public string Size { get; set; }

        [Column("fileName")]
        public string Name { get; set; }
        
        //[Required]
        public virtual Clip ClipOf { get; set; }
    }

这种方案也存在问题,不Include调用关联virtual实体类,永远是null,不支持延迟加载,很是郁闷。SqlServer据说可以解决,MySql我是没有找到解决方案。

还有就是构造函数一定不要去new附属实体类,会进入死循环。

 

方案三:使用TPH(Table per Hierarchy)

public abstract class ClipBase
    {
        [Key]
        [Column("clipId")]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }

        [Column("clipName")]
        public string Name { get; set; }
    }

    public class ClipFile : ClipBase
    {
        [Column("fileName")]
        public string FileName { get; set; }
    }

    public class ClipSize : ClipBase
    {
        [Column("fileSize")]
        public int Size { get; set; }
    }

而且必须是用Fluent API进行配置,还必须为Clips添加字段Discriminator(字段名称和类型都可以根据自己需要进行修改),这个字段的值用于区分是哪个类的数据,所以务必保证每个派生类的HasValue值不相同。

modelBuilder.Entity<ClipBase>().Map(m=>
            {
                m.ToTable("Clips");
                //m.Requires("Discriminator").HasValue("0"); //如果ClipBase不申明为抽象类这需要用此加以区分
            })
            .Map<ClipFile>(m => m.Requires("Discriminator").HasValue("1"))
            .Map<ClipSize>(m => m.Requires("Discriminator").HasValue("2"));

创建对象可以用基类的DbSet进行添加,也可以用派生类自己的DbSet进行添加。选取的时候你可以基类的DbSet.OfType<ClipFile>(),也可以用派生类自己的DbSet。

但是这种方案多实体其实就导致数据虽然在一个表,但是内容无法在三个类中共享了,失去了原有的设计初衷。

 

posted @ 2013-08-19 20:17 阿修 阅读(1375) 评论(0) 推荐(0) 编辑

2013年8月17日

摘要: Entity Framework中DbContext首次加载OnModelCreating会检查__MigrationHistory表,作为使用Code Frist编程模式,而实际先有数据库时,这种检测就是多余的了,所以需要屏蔽,在EF 4.1之前可以使用在OnModelCreating函数总加入下面语句来屏蔽这种检测:modelBuilder.Conventions.Remove();而到4.3之后需要使用,上列语句以被MSDN明确表示过时,所以需要新的方式取代:Database.SetInitializer(null);新EF一切正常! 阅读全文
posted @ 2013-08-17 23:24 阿修 阅读(6139) 评论(2) 推荐(2) 编辑

2013年8月12日

摘要: public class Book{ [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [Required, MaxLength(50)] public string Title { get; set; } public Double? Price { get; set; }}解决方案一:var bkList = db.Books.Select(allBooks => new { Id ... 阅读全文
posted @ 2013-08-12 10:31 阿修 阅读(1935) 评论(0) 推荐(1) 编辑

2013年6月27日

摘要: 最近把一些东西开始往Linux迁移了,因为老系统大部分都是.NET,所以直接使用Mono,代码一般都使用MonoDevelop把代码重新编译,把一些WMI和windows DLL调用改Linux的os调用,这些都是好说,网上很多教程,但是最郁闷的关于WebService问题,把自己的dll丢过去就报下面错误,单独的ASMX文件里面写代码没问题,好奇怪。System.Web.Compilation.CompilationExceptionCS1703: An assembly with the same identity `mscorlib, Version=4.0.0.0, Culture=n 阅读全文
posted @ 2013-06-27 22:38 阿修 阅读(3335) 评论(1) 推荐(0) 编辑

2012年3月5日

摘要: 今天有朋友问题我如何获取某年中第几个礼拜的时间范围,似乎以前好像记得.NET有,不过今天一查没有翻到,在google搜索到这个,希望以后能自己用上,测试已经通过。 public static void Main() { DateTime date1 = GoToWeek(2012, 2); Console.Write(date1.ToString()); Console.Read(); } private static DateTime GoToWeek(int year,... 阅读全文
posted @ 2012-03-05 15:59 阿修 阅读(581) 评论(0) 推荐(0) 编辑

2012年1月21日

摘要: 今天在做ADO.NET中的adapter进行数据自动触发更新数据库功能,发现一个很奇怪的问题,原来数据操作都是自己代码去完成更新,从来没有涉及到这种方式,所以一时晕菜了。 1 SQLiteDataAdapter dataAdpater = new SQLiteDataAdapter("Select cid,sd from VC", conn); 2 dataAdpater.DeleteCommand = new SQLiteCommand("delete From VC Where cid = @cid", conn); 3 dataAdpater.De 阅读全文
posted @ 2012-01-21 17:27 阿修 阅读(3034) 评论(2) 推荐(3) 编辑

2011年12月23日

摘要: 一、总论根据http://lucene.apache.org/java/docs/index.html定义:Lucene是一个高效的,基于Java的全文检索库。所以在了解Lucene之前要费一番工夫了解一下全文检索。那么什么叫做全文检索呢?这要从我们生活中的数据说起。我们生活中的数据总体分为两种:结构化数据和非结构化数据。结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等。当然有的地方还会提到第三种,半结构化数据,如XML,HTML等,当根据需要可按结构化数据来处理,也可抽取出纯文本按非结构化数据来处理。非结构化数据 阅读全文
posted @ 2011-12-23 16:11 阿修 阅读(273) 评论(0) 推荐(0) 编辑

2011年11月2日

摘要: 在Hits类里面GetMoreDocs函数中:TopDocs topDocs = (sort == null) ? searcher.Search(weight, filter, n) : searcher.Search(weight, filter, n, sort, GroupField);sort == null:到TopDocCollector处理sort != null:到TopFieldDocCollector处理 阅读全文
posted @ 2011-11-02 12:39 阿修 阅读(272) 评论(0) 推荐(0) 编辑

2011年10月13日

摘要: So, you need to setup a VPN connection to your work/client/buddy's remote network. No problem, just use the Windows VPN client, fill in the remote VPN server IP address, your username and password... click Connect. And a few seconds later you're connected to the remote network and you can no 阅读全文
posted @ 2011-10-13 14:08 阿修 阅读(304) 评论(0) 推荐(0) 编辑

2011年10月11日

摘要: UPX(the Ultimate Packer for eXecutables)是一个非常全面的可执行文件压缩软件,支持dos/exe、dos/com、dos/sys、djgpp2/coff、 watcom/le、win32/pe、rtm32/pe、tmt/adam、atari/tos、linux/i386等几乎所有平台上的可执行文件, 具有极佳的压缩比,还可以对未压缩的文件和压缩完后进行比较。官网站点:http://upx.sourceforge.net/ 阅读全文
posted @ 2011-10-11 14:19 阿修 阅读(1090) 评论(6) 推荐(0) 编辑

点击右上角即可分享
微信分享提示