0

だから私はいくつかのPOCOクラスを持っています:

public class Device : DbEntity
{
  public string DeviceName {get;set;}
}
public class AUT : DbEntity
{
  public string ApplicationName {get;set;}
}
public class Setup : DeviceAppDbEntity
{
  public bool Worked {get;set;}
}

public class DbEntity
{
  public Guid ID {get;set;}
}
public class DeviceAppDbEntity : DbEntity
{
  public virtual AUT ApplicationUnderTesting {get;set;}
  public virtual Device DeviceUnderTesting {get;set;}
}

したがって、AUT(アプリケーション)を削除したい場合、セットアップにはAppへの外部キーがあるため、ほぼ確実にエラーが発生します。追加すると言われました

public class DeviceAppDbEntity : DbEntity
{
  public virtual AUT ApplicationUnderTesting {get;set;}
  public Guid ApplicationUnderTestingId {get;set;} // THIS LINE ADDED

  public virtual Device DeviceUnderTesting {get;set;}
}

次に、カスケード削除が有効になります。これは正しいです?

セットアップにアクセスすると

_repository.Setups.FirstOrDefault(x => x.ID.Equals(setupID));

ナビゲーションプロパティvirtual AUTvirtual Deviceは自動的に入力する必要がありますか?はGuid ApplicationUnderTestingId自動的に記入されますか?

エンティティを保存したい場合Setup、navプロパティに入力するだけでいいですか?または、Guid ApplicationUnderTestingIdフィールドにも入力する必要がありますか、それとも逆の手順で入力するだけGuid ApplicationUnderTestingIdですか?

entityToSave.AUT = _repository.AUTs.FirstOrDefault(x => x.ID.Equals(vm.AppID));

また

entityToSave.ApplicationUnderTestingId= vm.AppID;
entityToSave.AUT = _repository.AUTs.FirstOrDefault(x => x.ID.Equals(vm.AppID));

また

entityToSave.ApplicationUnderTestingId= vm.AppID;

これはちょっと紛らわしいです。List<entities>リストを含むエンティティを削除すると、を定義するとさらに悪化します。リスト内のエンティティに関係があると文句を言いますが、これらのエンティティでカスケード削除を有効にするにはどうすればよいですか?

public class Blog: DbEntity
{
  public string Name {get;set;}
  public virtual Member {get;set;}

  public List<Comment> Comments {get;set;}
}

たくさんの質問のように思えますが、エンティティフレームワークの1つのトピックを中心に展開しています。私の質問に答えてくれてありがとう。

4

1 に答える 1

3

これに答えるために。

Cascade On Delete次のようなナビゲーションプロパティを実行すると有効になります

public virtual SomeClass {get;set;}
public Guid SomeClassId {get;set;}

あなたはそれらのどちらかに記入することができ、それはデータベースに保存されます。

No Cascade On Delete

public virtual SomeClass SomeClass {get;set;}

あなたがデータベースから読むとき、私は以下のように私のことをします:

var item = _repository.SomeClasses.FirstOrDefault(x => x.Id.Equals(id));

ナビゲーションプロパティは、キーワードを使用したため、アクセスしたい場合にのみ入力されます。遅延読み込みです。virtual

あなたがそうする限りList<Post>、あなたがそうするならば:

public class Post
{
    public virtual Blog Blog {get;set;}
    public Guid BlogId {get;set;}
}

その後、ブログが削除されると、それに関連するすべての投稿が削除されます。削除するとどうなるかは試していませんがBlogId、ブログを削除しても投稿は削除されないのではないかと思います。ただし、このBlog => Postモデルは、これを実行する理由を示すモデルではありません。

私はすべての質問に答えたと思います。public Guid SomeClassId {get;set;}要約すると、それはすべてが設定されているかどうかに依存しCascade On Deleteます。

于 2013-05-15T17:20:38.197 に答える