私は既存のアプリ/dataabseを持っています。アップグレードの一環として、EntityFrameworkを追加するように依頼されました。
edmxを生成(または再生成)すると、コードがデータベーステーブル内の外部キーを認識しなくなり、コードを実行すると、IDが欠落していると文句を言うという問題が発生しました。外部キーはどうあるべきか。
自動生成されたモデル定義に次の属性を追加することで、これを回避できます。
[ForeignKey("NavigationProperty")]
しかし、その後、edmxが再生成された場合、これはすべて吹き飛ばされ、再度追加する必要があります。
生成されるクラスは部分的ですが、これらの属性は既存のメンバーに追加されているため、別のファイルに移動することはできません。
では、どうすればこのオプションを回避できますか?理想的には、edmxが生成されたときに外部キーを確実に取得して、この問題が恒久的に修正されるようにしたいと思います。それができない場合、次のステップは、これらの関連付けをプログラムで生成する方法があるかどうかを確認することです。そのため、これは1回だけ実行されます。
ありがとう
編集-サンプルテーブル定義に追加
これがSMSによって自動生成されたコードです。外部キーの定義に何か問題がありますか?
CREATE TABLE [dbo].[ShopProductTypes](
[id] [int] IDENTITY(1,1) NOT NULL,
[Shop_Id] [int] NOT NULL,
[Product_Id] [int] NOT NULL,
[CreatedDate] [datetime] NOT NULL,
[CancelledDate] [datetime] NULL,
[Archived] [bit] NOT NULL,
CONSTRAINT [PK_ShopProductTypes] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[ShopProductTypes] WITH CHECK ADD CONSTRAINT [FK_ShopProductTypes_Shop] FOREIGN KEY([Shop_Id])
REFERENCES [dbo].[Shops] ([Id])
GO