0

Visual Studio 2012で新しいクラスライブラリプロジェクトを作成し、最初にEntityFrameworkコードを使用して新しいデータベースを作成できるようにするためにデータクラスを定義しました。そこで、3つのクラスを作成しました。

次の製品:

namespace MyClassLibrary
{
    public class Product
    {
        public virtual int ID { get; set; }
        public virtual string Name { get; set; }
    }
}

次のカテゴリ:

using System.Collections.Generic;

namespace MyClassLibrary
{
    public class Department
    {
        public virtual int ID { get; set; }
        public virtual string Name { get; set; }
        public virtual ICollection<Product> Products { get; set; }
    }
}

次のようにICategoryDataSource:

using System.Linq;

namespace MyClassLibrary
{
    public class ICategoryDataSource
    {
        IQueryable<Product> Products { get; }
        IQueryable<Category> Categories { get; }
    }
}

最後のクラスで、次のエラーメッセージが表示されます。'MyClassLibrary.ICategoryDataSource.Products.get'は、abstractまたはexternとマークされていないため、本文を宣言する必要があります。自動的に実装されるプロパティは、getアクセサーとsetアクセサーの両方を定義する必要があります。

ここではセッターは必要ありません。セットアクセサーの使用を避ける方法を教えてください。

4

2 に答える 2

3

ICategoryDataSource最後のコードセクションの名前から、クラスではなくインターフェイスになりたいと思います。

using System.Linq;

namespace MyClassLibrary
{
    public interface ICategoryDataSource
    {
        IQueryable<Product> Products { get; }
        IQueryable<Category> Categories { get; }
    }
}
于 2012-12-11T22:14:53.333 に答える
2

自動ゲッターまたは自動セッターしかない具象クラスに自動プロパティを設定することはできません。データを引き出すことができるようにするために、どのようにしてそのプロパティにデータを取得しますか?

ただし、抽象クラスまたはインターフェースでそれを行うことができます。どちらも、「データがここにどのように入るかは関係ありません。データを引き出すことができる必要があるだけです」と効果的に言います。

おそらくあなたが必要としているのはプライベートセッターです。

public IQueryable<Product> Products { get; private set; }

どのクラスでも完全に有効です。

于 2012-12-11T22:35:58.903 に答える