为什么实体框架中的TableAttribute是Dll?

时间:2011-05-17 16:25:53

标签: entity-framework entity-framework-4 entity

有一个很好的理由可以解释为什么Table属性(可用于将POCO类映射到正确的数据库名称/模式)在EntityFramework.dll中?

这是否会阻止您创建仅包含实体而不依赖于特定数据访问技术的域项目?例如,如果我使用此属性,我不相信这些类可以移植到Silverlight。

这是疏忽吗,还是我错过了什么?

我意识到我可以使用流畅的API来规避这一点,但该属性似乎更适用于此目的。

2 个答案:

答案 0 :(得分:2)

我认为因为TableAttribute已添加到EF 4.1中。它属于命名空间System.ComponentModel.DataAnnotations,如果EF 4.1已成为常规.NET Framework版本的一部分,它可能已添加到System.ComponentModel.DataAnnotations.dll程序集中。但由于EF 4.1是独立于Framework更新发布的,因此无法触及框架核心程序集。所以,它现在在EntityFramework.dll中但仍然在System.ComponentModel.DataAnnotations命名空间中,所以不知何故独立于Entity Framework。也许它会在下一个.NET Framework版本中移入System.ComponentModel.DataAnnotations.dll

现在,如果要使用TableAttribute装饰POCO,则必须引用EntityFramework.dll。只要您不在自定义程序集中使用“真正的”EF内容(DbContext等),我就不会将此视为Entity Framework的依赖项。

答案 1 :(得分:1)

这确实会导致Silverlight出现问题。

对于那些努力解决这个问题的人来说,目前必须使用流畅的API进行映射。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<BankAccount>().ToTable("BankAccounts");
    modelBuilder.Entity<CreditCard>().ToTable("CreditCards");
}

HTH。