2

3 つのテーブルがありますが、edmx を作成すると、edmx モデルには 2 つしか表示されません。また、ナビゲーションから外部参照テーブルにアクセスできません。各テーブルの主キー ID を xref テーブルに挿入する必要がありますが、ナビゲーション プロパティを取得しておらず、モデルに表示されないため、その方法がわかりません。ここにテーブルがあります:

CREATE TABLE Message (
  id BIGINT(20) NOT NULL AUTO_INCREMENT,
  email_body TEXT BINARY NOT NULL,
  create_date DATETIME NOT NULL,
  PRIMARY KEY (id)
)


CREATE TABLE Address (
  id BIGINT(20) NOT NULL AUTO_INCREMEN
  PRIMARY KEY (id)
)

CREATE TABLE AddressMessageXref (
  message_id BIGINT(20) NOT NULL,
  address_id BIGINT(20) NOT NULL,
  PRIMARY KEY (message_id, address_id),
  INDEX address_id (address_id),
  INDEX message_id (message_id),
  CONSTRAINT FK_AddressMessageXref_Address_id FOREIGN KEY (address_id)
    REFERENCES Address(id) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT FK_AddressMessageXref_Message_id FOREIGN KEY (message_id)
    REFERENCES Message(id) ON DELETE RESTRICT ON UPDATE RESTRICT
)

メッセージ テーブルとアドレス テーブルに挿入した後、返された ID を AddressMessageXref テーブルに挿入する必要があります。

4

1 に答える 1

1

Xref テーブルは EntityFramwork からは見えません。フレームワークによって埋められます。

public class Message 
{
    public int Id {get;set;}
    public string Body {get;set;}
    [...]
    public virtual ICollection<Address> Addresses {get;set;}
}

public class Address
{
    public int Id {get;set;}
    [...]
    public virtual ICollection<Message> Messages {get;set;}
}

メッセージをアドレスに追加する場合、またはその逆の場合に、このようなセットアップを使用します。EntityFramework は、実際に Xref テーブルにデータを挿入します。

例:

var address = new Address();
var message1 = new Message();
var message2 = new Message();
message1.Addresses.Add(address);
address.Messages.Add(message2);

dataContext.Addresses.Add(address);
dataContext.SaveChanges();

このコードは、アドレス テーブルに 1 つのエンティティ、メッセージ テーブルに 2 つ、Xref テーブルに 3 つのエンティティを挿入します。

于 2013-10-07T19:05:16.750 に答える