1

1)

WCF で動作する Entity Framework (v.5) プロジェクトがあります。

私のデータベースには Account テーブルがあるため、「Account」エンティティ フレームワーク オブジェクトがあります。メソッドを公開したい:

 AddAccount(Account a)

Account パラメータは、データベースから生成されたエンティティ フレームワーク オブジェクトです。

このサービスを利用しようとするたびに、Account のプロパティが空になり、その理由がわかりません。

これが私のコードの例です:

WCF :

インターフェース:

[OperationContract(Name = "AddAccount")]
string AddAccount(Account Account);

埋め込む:

public string AddAccount(Account newAccount)
{
    myContext db=new myContext();
    db.Accounts.Add(newAccount);
    db.SaveChanges();
    return "something";
}

アカウント クラスは EF によって生成され、int「id」フィールドとDateTime「Created」フィールドを持ちます。

私の質問は、なぜ「newAccount」パラメーターが空なのですか?

2)

私の知る限り、複雑なパラメーターを持つメソッドを公開する最善の方法は and を使用することDataContractでありDataMembers、それによって 2 つの疑問が生じます。

DataContracta) Entity オブジェクトに実装する必要がありますか? 私が理解したことから、EFオブジェクトを直接公開することはお勧めできませんがDataContract、転送したいクラスで使用しますが、一方、プロジェクトを使用しようとしてもエラーは発生しませんがDataContract、アカウントに実装されていません.

b) データベース テーブルのビルドをクライアントに理解させる以外に、EF オブジェクトをパラメーターとして渡すことが推奨されないのはなぜですか?

ありがとう。

4

1 に答える 1

1

データベースでは、ID 仕様を id フィールドに割り当てることができ、作成したフィールドにデフォルト値を与えることができます。

id と created の列がある場合は、Created を初期化する必要があります。データベースに ID 仕様がない場合を除き、id フィールドを初期化する必要はありません。一般に、データベースはプロパティに割り当てられるべき値を推測できないため、値を初期化する必要があります。

したがって、エンティティはデータベースによって作成されたのではなく、メソッドによって作成され、初期化していないため空です。例の初期化

public string AddAccount()
{
    myContext db=new myContext();
    //id is not initialized, because I'm assuming it has an identity specification
    db.Accounts.Add(new Account() { Created = DateTime.Now.ToUniversalTime()});
    db.SaveChanges();
    return "something";
}

エンティティ クラスは DataContract を実装する必要はありません。私のプロジェクトは、DataContract を実装しないクラスのインスタンスである EF オブジェクトを使用して完璧に動作します。

ビジネス ロジックのパラメータとして EF オブジェクトを渡すことができますが、まったく問題はありません。データベースのスキーマが何であるかをクライアントに知らせないように注意するだけです。

これが役立つことを願っています。

于 2013-02-10T18:58:15.673 に答える