0

我在 Visual Studio 2012 中创建了一个新的类库项目,以定义数据类,以便首先使用实体​​框架代码创建新的数据库。所以我创建了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”必须声明一个主体,因为它没有标记为抽象或外部。自动实现的属性必须同时定义 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

您永远不能在只有自动 getter 或自动 setter 的具体类中拥有自动属性。您如何将数据放入该属性以便能够将其提取出来?

但是,您可以在抽象类或接口中执行此操作,它们都有效地表示“我不在乎数据如何进入这里,我只需要可以将其拉出”。

可能您需要的是私人二传手。

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

在任何课程中都是完全有效的。

于 2012-12-11T22:35:58.903 回答