2

リバース エンジニアリング Code First によって行われたいくつかの選択の背後にある理由をよりよく理解しようとしています。

これはスキーマです。ユーザーとアフィリエイトの両方に FK があることを示しています。

CREATE TABLE [dbo].[Orders] (
    [ID]                  INT             IDENTITY (1, 1) NOT NULL,
    [idUser]              INT             NOT NULL,
    [orderDate]           SMALLDATETIME   NOT NULL,
    [total]               MONEY           NOT NULL,
    [idAffiliate]         INT             NOT NULL,
    CONSTRAINT [PK_cartHead] PRIMARY KEY CLUSTERED ([ID] ASC) WITH (FILLFACTOR = 90),
    CONSTRAINT [FK_Orders_Affiliates] FOREIGN KEY ([idAffiliate]) REFERENCES [dbo].[Affiliates] ([ID]),
    CONSTRAINT [FK_Orders_Users] FOREIGN KEY ([idUser]) REFERENCES [dbo].[Users] ([ID])
);

REの世代は次のとおりです。

...
        public int ID { get; set; }
        public int idUser { get; set; }
        public System.DateTime orderDate { get; set; }
        public decimal total { get; set; }
        public int idAffiliate { get; set; }
        public virtual Affiliate Affiliate { get; set; }
        public virtual User User { get; set; }
        public virtual ICollection<OrdersRow> OrdersRows { get; set; }

OrderMap.cs

    // Table & Column Mappings
    this.ToTable("Orders");
    this.Property(t => t.ID).HasColumnName("ID");
    this.Property(t => t.idUser).HasColumnName("idUser");
    this.Property(t => t.orderDate).HasColumnName("orderDate");
    this.Property(t => t.total).HasColumnName("total");
    this.Property(t => t.initiatedBy).HasColumnName("initiatedBy");
    this.Property(t => t.idAffiliate).HasColumnName("idAffiliate");

    // Relationships
    this.HasRequired(t => t.Affiliate)
        .WithMany(t => t.Orders)
        .HasForeignKey(d => d.idAffiliate);
    this.HasRequired(t => t.User)
        .WithMany(t => t.Orders)
        .HasForeignKey(d => d.idUser);

私が興味を持っているのは、重複のように見えるものです - idAffiliate は機能的に複合オブジェクト - Affiliate と同じです。idUser -> User も同様です。

クラスが両方を望む理由はありますか?

エンティティ フレームワーク パワー ツール ベータ 2

どうも

4

2 に答える 2

1

fk id プロパティを使用する正当な理由の 1 つは、追加のオブジェクトをメモリにロードする必要なく簡単に変更できることです。

MyObj.Fkid = 6;

それ以外の

MyObj.FkObj = fkobject;
于 2012-04-16T01:21:59.977 に答える
0

Entity Framework 内では、外部キーを表す 2 つの方法があります。1 つは実際の ID で、もう 1 つはナビゲーション プロパティと呼ばれる概念です。ナビゲーション プロパティを使用すると、基本的に、外部キーによって参照される追加データを結合できます。

ナビゲーション プロパティは、エンティティ参照用のシンプルで読みやすいコードを可能にするため、結合されたデータのコーディングに最適な方法です。また、C# がオブジェクトを処理する方法にも適合します。

パフォーマンス上の理由から、モデルにこれらの両方が必要になる場合があります。Navigation プロパティを使用して、注文にアフィリエイトがあるかどうか (または特定の ID を持つアフィリエイトがあるかどうか) を確認する場合、アフィリエイト テーブルでの結合が必要になります。

FK Id を見るだけで、SQL で結合を使用せずに同じことを実現できます。

于 2012-04-15T23:56:12.727 に答える