我可以让Entity Framework只使用表格的一部分吗?

问题描述:

我需要连接到现有的数据库表并允许用户更新几列。问题是,这个数据库表是我们的第三方软件的一部分,包含超过150列,我只需要访问其中的5个左右。我可以让Entity Framework只使用表格的一部分吗?

有没有一种方法,在不使用的意见,让实体框架来选择和更新只有几列?

我想我可以拉下整个记录,但我也有第二个表我需要连接到,我曾想把这张表分成多个实体,因为我们的软件供应商以他们无限的智慧决定将多个不相关的信息放到一个表中。

+0

你可以仅仅删除属性,你不要在EF设计需要:从数据库中创建模型和删除你不需要 – JackNova

+0

@JackNova它不会让我删除不能为空的属性,并且有很多的 – Rachel

你可以做你的更新直通映射到EF存储过程。 SP可以只处理你想要的那些列;如果您想减少下拉到应用程序的列数,也可以使用SP作为选择。

+0

我认为这是我要走的路。我希望有一个可以让我直接操纵桌子的选择,但它看起来不像。 – Rachel

的看法是这里最好的决定。虽然可以创建该类,然后删除147个属性,并留下您实际需要的属性。请注意,您需要在所有课程中保留主键! 此外,插入可能无法正常工作,因为某些被省略的列可能不允许导致sql异常的空值。

+0

我尝试添加表和删除,除了我所需要的那些所有的列,但它使我保持它不能为空的所有列,并有相当其中的一些。我不喜欢视图的想法,因为我真的不知道如何轻松更新视图,但我想我可以找出... – Rachel

实体框架有一个叫做表拆分功能。我发现此处的步骤:Table Splitting in Entity Framework

你可以在你的EF模型分成两个实体,这样一个实体只会有你需要的5列。我之前尝试过,以帮助我避免从表中检索所有数据。

+0

如果我正在使用的数据库没有这么多必填字段,那会很好用。如果EF不能为空,那么EF不会让我从实体中删除字段,并且我正在使用的表中的大量字段不能为空。无论如何,尽管一个不错的解决方案。 – Rachel

+0

哦,虽然很无聊,但我想知道EF是否允许删除必填字段,如果它有默认值设置。还没有尝试过。我也看到了这个看起来相似的链接,但是没有太多可行的解决方案:http://*.com/questions/737520/entity-framework-ignore-columns –

+0

@Rachel,其实,你可以做到这一点,这只是设计师并不直接支持它。您必须手动编辑EDMX并从SSDL,MSL和CSDL中删除字段。请注意,这与表分割不同。 –

到目前为止提到的选项都可以使用,但有一个更简单的解决方案,既不需要新的数据库模式,也不需要更改模型。

只选择几个列,只project

var smallResultSet = from b in Context.BigHonkinTable 
        where b.Id == someId 
        select new 
        { 
         This = b.This, 
         That = b.That 
        }; 

检查生成的SQL。

要更新,使用stub

var stub = new BigHonkinEntitiy { Id = someId }; 
Context.AttachTo("BigHonkinTable", stub); 
// important: Mutate stub *after* attaching 
stub.This = "Something else"; 
Context.SaveChanges();