【问题标题】:Entity Framework Code First CTP5 Mapping实体框架代码优先 CTP5 映射
【发布时间】:2010-12-13 10:27:00
【问题描述】:

我刚刚开始在一个新项目中实施 EF CTP 5。在这种情况下,由于数据库命名约定不明确,我的所有数据库字段的命名都与我的 POCO 属性不同。我是否认为映射它的最佳方法是覆盖 OnModelCreating 并拥有这样的代码

    modelBuilder.Entity<Sale>().Property(s => s.ID).HasColumnName("sale_id");
    modelBuilder.Entity<Sale>().Property(s => s.ProductName).HasColumnName("product_name");
    modelBuilder.Entity<Sale>().Property(s => s.ProductPrice).HasColumnName("product_price");
    modelBuilder.Entity<Sale>().Property(s => s.SaleDate).HasColumnName("sale_date");

这很快就会变得非常大,这真的是最好的方法吗?

【问题讨论】:

    标签: c# entity-framework code-first


    【解决方案1】:

    我认为您应该考虑使用新的 CTP5 Column 属性。在这种情况下,使用数据注释似乎是比 fluent API 更好的选择。您的销售类将如下面的代码所示:

    public class Sale
    {
        [Column(Name="sale_id")]
        public int ID { get; set; }
    
        [Column(Name="product_name")]
        public string ProductName { get; set; }
    
        [Column(Name="product_price")]
        public string ProductPrice { get; set; }
    
        [Column(Name="sale_date")]
        public DateTime SaleDate { get; set; }
    }
    

    【讨论】:

    • 不过,如果您将业务实体与数据层分开,这似乎不是最好的方法
    【解决方案2】:

    感谢您的回答

    我最终坚持使用我原来的方法,因为我想将实体与数据层分开。

    但是,为了使其更易于管理,我将上下文设为部分类,并使用 MapUsers 或 MapRoles 等私有方法为每个实体创建了一个文件,然后在 OnModelCreating 中我只是调用了这些方法。

    【讨论】:

    • 有趣的解决方案 - 使用部分,然后使用事件。这意味着每个 poco 可以有 1 个部分课程,对吗? (更糟糕的情况)。
    • 是的,没错。也许它不适合所有人,但对我来说,它使代码更易于管理。
    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2012-03-12
    • 2011-04-21
    • 2012-05-18
    相关资源
    最近更新 更多