C# 如何自动命名有意义的外部引用?

C# 如何自动命名有意义的外部引用?,c#,entity-framework,C#,Entity Framework,假设我有table Customer和两个table City的参考。实际上(默认情况下),我将为每个客户记录获取City1和City2国外参考。正如您所看到的,当building name EF只考虑外部表名,而忽略源字段时 如果EF可以同时使用目标表名和源字段名(如字段custBorn-->custBornCity和字段custlifes-->custlifescity),则会更好 问题 是否有任何方法可以自动执行此操作?——除了编号的引用(City1、City2…)之外,还有什么更有意义的

假设我有table Customer和两个table City的参考。实际上(默认情况下),我将为每个客户记录获取City1和City2国外参考。正如您所看到的,当building name EF只考虑外部表名,而忽略源字段时

如果EF可以同时使用目标表名和源字段名(如字段custBorn-->custBornCity和字段custlifes-->custlifescity),则会更好

问题

是否有任何方法可以自动执行此操作?——除了编号的引用(City1、City2…)之外,还有什么更有意义的方法

编辑 1. 我有有有意义的字段名(在表中),有意义的外键。但EF忽略了这些信息。它只关注目标表名(只有使用一次才有意义)

2. 我举几个例子来重新表述这个问题。我的外键(在DB中)名为FK_Born_City和FK_Lives_City。因此,我希望通过EF自动生成这样的名称:

  • FK_出生城市、FK_居住城市(来自外键名称)或
  • 出生于城市、LivesCity(来自外键名称)或
  • custBornCity、custLivesCity(字段+表名的串联)或
  • CityCustomBorn、CityCustomLives(同上,但顺序相反)或
  • FK_Born_CitycityBorn,FK_Lives_CitycityLives(FK+字段名的串联,丑陋)或

    我希望你明白了

[…]忽略源字段


除非属性是静态的。只要属性存在于类型为
Customer
的对象实例上,就不能认为源部分被忽略,在Sql server 2008中,它会在创建FK约束名称时自动使用表名和字段名

Sql server在创建默认约束时忽略字段值

可以使用以下示例脚本为FK约束创建有意义的名称

IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TableName_ColumnName]') AND parent_object_id = OBJECT_ID(N'[dbo].[TableName]'))

ALTER TABLE [dbo].[TableName]  WITH CHECK ADD  CONSTRAINT [FK_TableName_ColumnName] FOREIGN KEY([PK_Field])
REFERENCES [dbo].[TableName2] ([FK_Field])
GO

“如何自动产生意义”,如“如何减少系统中的熵”。我猜你的意思是:如果我决定用什么方式来命名外国参考文献,我怎么能自动让它发生?@Sehe,可能是我的英语不好,如果你把我理解为“如何产生意义”。@Sehe,这个问题很完美,对每个开发者来说都是一个巨大的痛苦,我们确实成功地编写了自定义代码生成器,解决了这个问题。不幸的是,它太大了,无法作为这里的答案。但是生成有意义的名称是可能的。@Akash Kava,嗯,历史似乎又重演了——我为LinqToSQL编写了这样的生成器,现在不是对EF做完全相同的事情的时候了:-(我同意,但更容易的是切换到代码优先,您可以从一些xml生成代码优先的代码。看,我的表中有一个有意义的字段,我有一个有意义的外键,但所有这些都被忽略了。啊哈,我们已经找到了您想要使用的含义的来源。如果您更新了问题,让我删除此答案。甚至可能提到你认为“有意义的”数据库名称的例子。UppTad我想我已经找到了你想说的地方。你可以让它更明确。(我的字段名为:BORN和lifes,我希望生成的属性分别命名为
BornCity
LivesCity
。是的,这个或CityBorn,CityLives,我不在乎,但这有意义,与City1,City2完全相反。