以下のコード スニペットをアプリケーションで問題なく実行できます。
Projects.Select(s =>
new ProjectName()
{
ProjectID = s.ProjectID,
Name = s.Name
})
ProjectName は、次のクラスに存在するパラメーターなしのコンストラクターであることに注意してください。
namespace YeagerTechModel.DropDownLists
{
[DataContract]
[Serializable]
public partial class ProjectName
{
[DataMember]
public Int16 ProjectID { get; set; }
[DataMember]
public String Name { get; set; }
}
}
ただし、アプリケーションで次のクエリを実行できません。設計時のコンパイル エラーはありません。「Catch」ステートメントの実行時に、この投稿の件名でのみエラーが発生します。
Projects.Where(w => w.Status.Description == "Not Started").Select(s =>
new CustomerProjectDDL()
{
ProjectName =
{
ProjectID = s.Project,
Name = s.Name
},
Customer =
{
CustomerID = s.CustomerID,
Email = s.Customer.Email,
City = s.Customer.City,
State = s.Customer.State,
Zip = s.Customer.Zip
}
})
CustomerProjectDDL は、2 つのクラスを含むパラメーターなしのコンストラクターであることに注意してください。
namespace YeagerTechModel.ViewModels
{
[DataContract]
[Serializable]
public partial class CustomerProjectDDL
{
[DataMember]
public Customer Customer = new Customer();
[DataMember]
public ProjectName ProjectName = new ProjectName();
}
}
ビューには両方のプロパティが必要なため、ビューにはこれらのクラスの両方が必要です。Customer オブジェクトは、すべてのプロパティを持つ DbContext を使用して Visual Studio の ORM のコード生成アイテムから生成され、ProjectName クラスは上記の投稿で指定した最初のクラスです。
助けていただければ幸いです...
AutoMapperを使用して新しい ViewModel に手動でプロパティを入力する以外に、ビューを満たすために 1 つのモデル内の 2 つ以上の別々のテーブルからデータを取得するにはどうすればよいでしょうか?
私がやったことは良いコンセプトだと思いました。生成された DbContext またはその他のクラスのいずれかを取得し、スーパークラス (CustomerProjectDDL クラスなど) 内に配置するだけです。