EF生成类上的LINQ

EF生成类上的LINQ,linq,entity-framework,class,generated,Linq,Entity Framework,Class,Generated,我在数据库中的EF上有这些类 public partial class STUDENT { public short STUDENTID { get; set; } public string NAME { get; set; } public string FAMILY { get; set; } public virtual CLASS CLASS { get; set; } } public partial class CLASS { publi

我在数据库中的EF上有这些类

public partial class STUDENT
{
    public short STUDENTID { get; set; }
    public string NAME { get; set; }
    public string FAMILY { get; set; }

    public virtual CLASS CLASS { get; set; }
}

public partial class CLASS
{
    public CLASS()
    {
        this.STUDENTs = new HashSet<STUDENT>();
    }

    public short CLASSID { get; set; }
    public string CLASSNAME { get; set; }

    public virtual ICollection<STUDENT> STUDENTs { get; set; }
}

public partial class VALIDNAMES
{
    public string VALIDNAME { get; set; }
}
公立部分班学生
{
公共短学生ID{get;set;}
公共字符串名称{get;set;}
公共字符串族{get;set;}
公共虚拟类{get;set;}
}
公共部分类
{
公共类()
{
this.STUDENTs=newhashset();
}
公共短CLASSID{get;set;}
公共字符串类名{get;set;}
公共虚拟ICollection学生{get;set;}
}
公共部分类VALIDNAMES
{
公共字符串有效名称{get;set;}
}
我希望强制用户不能在student.name上插入任何数据,而该名称不在VALIDNAMES记录中。 我希望在模型层中执行此操作,因为我希望在许多页面上使用名称属性,因此我希望在此层上进行此验证


另一方面,我想在模型层上使用LINQ,或者是否可能为EF生成的类设置更改集和get?

您可以尝试在学生表中引用VALIDNAMES表的VALIDNAME列的NAME列上设置外键约束

假设您使用的是SQL Server,则需要对数据库执行以下操作:

ALTER TABLE [dbo].[STUDENT]  WITH CHECK ADD  CONSTRAINT [FK_student_valid_name] FOREIGN KEY([NAME])
REFERENCES [dbo].[VALIDNAMES] ([VALIDNAME])
GO
您可能还需要将[STUDENT].[NAME]列指定为
notnull
(这样您的用户就不能输入
NULL
名称),并将[VALIDNAMES].[VALIDNAME]设置为唯一索引/主键


这样,验证由DBMS而不是应用程序代码完成。

您可以将setters设置为私有。好的,谢谢,但我的问题是公开的,因为我使用linq on EF生成类进行验证。例如,我在数据库上有一个函数,获取id参数并返回布尔结果,我希望只有人员可以更新学生表记录,该函数返回true。您最初的问题没有提到任何关于调用db函数的内容,这就是您真正想要实现的吗?我希望在属性的set部分使用LINQ来根据特殊条件检索值,并且只允许为该值设置值