实体框架 - 定义没有set访问器的get

时间:2012-12-11 22:11:10

标签: c# get ef-code-first set entity-framework-5

我在Visual Studio 2012中创建了一个新的类库项目,用于定义数据类,以便首先使用Entity Framework代码创建新的数据库。所以我创建了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访问器。

我不需要这里的setter,请告知我如何避免使用set访问器。

2 个答案:

答案 0 :(得分:3)

通过最后一个代码部分中的名称,我假设您希望ICategoryDataSource成为一个接口,而不是一个类:

using System.Linq;

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

答案 1 :(得分:2)

具有自动getter或自动设置器的具体类中,您不能拥有自动属性。您如何将数据导入该属性以便能够将其拉出来?

可以然后在抽象类或接口中这样做,这两者都有效地说“我不关心数据如何进入这里,我只是要求它可以被拉出来。” / p>

您可能需要的是私人制定者。

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

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