你好
使用 c# 和 ASP .Net Core 6,我有一个 N 层 Web 应用程序,它实现了存储库模式和工作单元。
在此 Web 应用程序中,管理员可以基于以下模型创建主题标签:
ASP.NET (C#)复制
public class Hashtag
{
[Key]
public int Id { get; set; }
[Required]
[StringLength(50, ErrorMessage = "Name cannot be longer than 50 characters.")]
public string Name { get; set; }
[Required]
[StringLength(100, ErrorMessage = "Description cannot be longer than 100 characters.")]
public string Description { get; set; }
}
在IHashtagRepository.cs中,我添加了以下方法:
ASP.NET (C#)复制
public interface IHashtagRepository : IRepository<Hashtag>
{
bool CheckIfHashtagExists(string name);
}
在HashtagRepository.cs中,我有以下内容:
ASP.NET (C#)复制
public bool CheckIfHashtagExists(string name)
{
var objFromDb = _db.Find(e => e.Name == name);
return objFromDb.Any();
}
在Create.cshtml.cs的 OnPost() 方法中,我想确保 Hashtag.Name 是不同的(而不是重复的)。
我虽然做了这样的事情:
var objExists = CheckIfHashtagExists(somenamehere);
if (objExists = True)
{
Do some stuff
}
else
{
Do something else
}
我在 HashtagRepository.cs 中收到此行的错误
var objFromDb = _db.Find(e => e.Name == name);
编译器错误 CS1061 type' 不包含“name”的定义,并且找不到接受类型“type”的第一个参数的可访问扩展方法“name”(是否缺少 using 指令或程序集引用?
我不确定如何更正此错误。
此外,我不确定是否有更正确的方法来实现我正在尝试做的事情。
My Generic Repository 在界面中提供了以下 Mathods:
public interface IRepository<T> where T : class
{
T Get(int id);
IEnumerable<T> GetAll();
IEnumerable<T> Find(Expression<Func<T, bool>> expression);
T GetFirstOrDefault(Expression<Func<T, bool>>? filter = null, string? includeProperties = null);
void Add(T entity);
void Remove(int id);
void Remove(T entity);
void RemoveRange(IEnumerable<T> entity);
}
Note:此问题总结整理于: Determining If Entity Is Unique In Repository Pattern