Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
已定义名为X c#model的成员_C# - Fatal编程技术网

已定义名为X c#model的成员

已定义名为X c#model的成员,c#,C#,有课本,在那里我应该实施两个外国表。评论和评级。这是一节课: public class Books { public Books() { CommentsList = new List<Comments>(); } public Books() { RatingList = new List<Rating>(); }

有课本,在那里我应该实施两个外国表。评论和评级。这是一节课:

 public class Books
    {

        public Books()
        {
            CommentsList = new List<Comments>();
        }

        public Books()
        {
            RatingList = new List<Rating>();
        }

        public virtual int Id { get; set; }
        public virtual string Title { get; set; }

        public virtual string Category { get; set; }

        public virtual string ISBN { get; set; }

        public virtual string Description { get; set; }

        public virtual string Image { get; set; }

      //  public virtual int CategoryId { get; set; }

        public virtual Categories Categories { get; set; }

        public virtual IList<Comments> CommentsList { get; set; }
        public virtual IList<Rating> RatingList { get; set; }

        public virtual void AddComment(Comments comm)
        {
            comm.Books = this;
            CommentsList.Add(comm);
        }

        public virtual void AddRating(Rating rating)
        {
            rating.Books = this;
            RatingList.Add(rating);
        }


    }
公共类书籍
{
公共书籍()
{
CommentsList=新列表();
}
公共书籍()
{
RatingList=新列表();
}
公共虚拟整数Id{get;set;}
公共虚拟字符串标题{get;set;}
公共虚拟字符串类别{get;set;}
公共虚拟字符串ISBN{get;set;}
公共虚拟字符串描述{get;set;}
公共虚拟字符串映像{get;set;}
//公共虚拟int类别ID{get;set;}
公共虚拟类别{get;set;}
公共虚拟IList CommentsList{get;set;}
公共虚拟IList分级列表{get;set;}
公共虚拟void AddComment(comm注释)
{
通讯簿=此;
添加注释列表(comm);
}
公共虚拟空添加评级(评级)
{
评级。书籍=这个;
评级列表。添加(评级);
}
}
它给出了一个错误

错误2已使用相同的名称定义了名为“Books”的成员 参数类型


如何解决这一问题,以便有可能在书中添加评论和评级

您有两次相同的构造函数。我猜您正在使用实体框架,如果我没记错的话,您希望将那些
IList
s更改为
ICollection
s以使用实体框架延迟加载功能

改变

public class Books
{

    public Books()
    {
        CommentsList = new List<Comments>();
    }

    public Books()
    {
        RatingList = new List<Rating>();
    }
}
公共类书籍
{
公共书籍()
{
CommentsList=新列表();
}
公共书籍()
{
RatingList=新列表();
}
}
致:

公共类书籍
{
公共书籍()
{
CommentsList=新列表();
RatingList=新列表();
}
}

您有两次相同的构造函数。我猜您正在使用实体框架,如果我没记错的话,您希望将那些
IList
s更改为
ICollection
s以使用实体框架延迟加载功能

改变

public class Books
{

    public Books()
    {
        CommentsList = new List<Comments>();
    }

    public Books()
    {
        RatingList = new List<Rating>();
    }
}
公共类书籍
{
公共书籍()
{
CommentsList=新列表();
}
公共书籍()
{
RatingList=新列表();
}
}
致:

公共类书籍
{
公共书籍()
{
CommentsList=新列表();
RatingList=新列表();
}
}

您不能有两个具有相同签名的构造函数。你应该考虑使用。

您通常会隐藏构造函数(使其私有),而公开静态方法,如
CreateFromComments
CreateFromRatings

private Books() { }

public static Books CreateFromComments()
{
    var ret = new Books();
    ret.CommentsList = new List<Comments>();
    return ret;
}

public static Books CreateFromRatings()
{
    var ret = new Books();
    ret.RatingsList = new List<Ratings>();
    return ret;
}
private Books(){}
公共静态书籍CreateFromComments()
{
var ret=新书();
ret.CommentsList=新列表();
返回ret;
}
公共静态书籍CreateFromRatings()
{
var ret=新书();
ret.RatingsList=新列表();
返回ret;
}

您不能有两个具有相同签名的构造函数。你应该考虑使用。

您通常会隐藏构造函数(使其私有),而公开静态方法,如
CreateFromComments
CreateFromRatings

private Books() { }

public static Books CreateFromComments()
{
    var ret = new Books();
    ret.CommentsList = new List<Comments>();
    return ret;
}

public static Books CreateFromRatings()
{
    var ret = new Books();
    ret.RatingsList = new List<Ratings>();
    return ret;
}
private Books(){}
公共静态书籍CreateFromComments()
{
var ret=新书();
ret.CommentsList=新列表();
返回ret;
}
公共静态书籍CreateFromRatings()
{
var ret=新书();
ret.RatingsList=新列表();
返回ret;
}

可能是您可以传递一个布尔参数,将列表设置为初始化

    public Books(bool comments)
    {
        if (comments)
            CommentsList = new List<Comments>();
        else
            RatingList = new List<Rating>();
    }
公共书籍(bool评论)
{
如果(评论)
CommentsList=新列表();
其他的
RatingList=新列表();
}

可能是您可以传递一个布尔参数,将列表设置为初始化

    public Books(bool comments)
    {
        if (comments)
            CommentsList = new List<Comments>();
        else
            RatingList = new List<Rating>();
    }
公共书籍(bool评论)
{
如果(评论)
CommentsList=新列表();
其他的
RatingList=新列表();
}

因为您有两个完全相同的构造函数!如果你需要两个键,为什么不出于好奇把它们放在一个构造函数中呢?为什么你所有的属性都是虚拟的?如果您使用的是实体框架,那么只有导航属性需要是
virtual
public virtual Categories{get;set;}
public virtual ICollection comments list{get;set;}
,等等)。使用流畅的NHibernate映射。读到所有东西都应该是虚拟的。@dongou哦,好吧,那就有道理了。因为你有两个完全相同的构造函数!如果你需要两个键,为什么不出于好奇把它们放在一个构造函数中呢?为什么你所有的属性都是虚拟的?如果您使用的是实体框架,那么只有导航属性需要是
virtual
public virtual Categories{get;set;}
public virtual ICollection comments list{get;set;}
,等等)。使用流畅的NHibernate映射。读到所有东西都应该是虚拟的。@dongou哦,好吧,那就有道理了。一些帮助??示例?虽然这是一个非常有用的设计模式,但我认为它不适合@dongou.@JimmyBoh--…因为…?@roryap因为这不是一个关于有两个不同用途的类似“构造函数”的问题,而是一个关于为什么提供的语法无效的问题。(这对于为什么要创建两个不同的生成器方法,每个方法初始化一个不同的列表没有任何意义)一些帮助??示例?虽然这是一个非常有用的设计模式,但我认为它不适合@dongou.@JimmyBoh--…因为…?@roryap因为这不是一个关于有两个不同用途的类似“构造函数”的问题,而是一个关于为什么提供的语法无效的问题。(这对我来说没有任何意义