小编gra*_*son的帖子

实体框架中的条件包含()

我已经看到了类似问题的一些答案,但我似乎无法弄清楚如何将答案应用于我的问题.

var allposts = _context.Posts
            .Include(p => p.Comments)
            .Include(aa => aa.Attachments)
            .Include(a => a.PostAuthor)
            .Where(t => t.PostAuthor.Id == postAuthorId).ToList();
Run Code Online (Sandbox Code Playgroud)

附件可以由作者(类型作者)或贡献者(类型贡献者)上传.我想要做的是,只获取附件所有者属于作者类型的附件.

我知道这不起作用并给出错误:

.Include(s=>aa.Attachments.Where(o=>o.Owner is Author))
Run Code Online (Sandbox Code Playgroud)

我在这里读过Filtered Projection

编辑 - 链接到文章:: http://blogs.msdn.com/b/alexj/archive/2009/10/13/tip-37-how-to-do-a-conditional-include.aspx ,

但我无法理解它.

我不想在最后的where子句中包含过滤器,因为我想要所有帖子,但我只想检索属于作者的那些帖子的附件.

编辑2: - 请求发布模式

public abstract class Post : IPostable
{

    [Key]
    public int Id { get; set; }

    [Required]
    public DateTime PublishDate { get; set; }

    [Required]
    public String Title { get; set; }

    [Required]
    public String Description { get; set; }

    public Person PostAuthor { get; …
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-entities entity-framework

18
推荐指数
2
解决办法
3万
查看次数

实体框架代码首先将 TPT 转换为 TPH

我使用 EF Code First 使用 TPT 开发了一个应用程序(发布附件、评论等)。它运行良好,并且正在与许多客户进行 beta 测试。但是,存在许多层次结构。因此,我有一个包含各种继承模型的基本模型,每个模型都包含许多属性,这些属性本身就是继承类型。

我注意到它非常慢,因此我查看了它生成的 SQL 并获取帖子列表,EF 生成了 2000 多行 SQL。编译时间非常长,我不喜欢为每个请求通过网络发送那么多数据的想法。启动时需要 5 秒才能获得 3 个帖子。后面的调用速度快了很多,但是每次有回收,速度又慢了。

我尝试过 Dapper 和手写代码,但问题是 Dapper 不适合需要依赖类型的多级查询;即 DisplayTemplates 和手写代码,虽然快速是不合适的,因为它会使未来的开发变得更加复杂。

我想尝试将一些代码(表)移至 TPH 并考虑在违反第三规范和代码可维护性之间进行权衡是可以接受的,但我找不到有关如何转换现有数据库的任何信息。

如果我从头开始,我只会删除 [Table...] 注释,但是我假设如果我使用填充的数据库执行此操作,我将丢失映射表中的所有数据,并且不会填充新的数据包含现有数据的单个表。

它是否正确?有谁知道如何将现有表从 TPT 转换为 TPH 或最佳实践。

我只有几个客户将此作为试验运行,但如果我丢失一半的数据,他们不会高兴!

c# entity-framework ef-code-first

4
推荐指数
1
解决办法
1115
查看次数

React useState,useEffect 中的 setState 不更新数组

我在 SO 上看到过这个问题,但我似乎无法弄清楚它为什么存在。

我从这里开始学习教程

我正在使用 useState 但当我尝试更新状态时,数组为空。我正在使用状态最初创建一个空数组。在收到消息时,我尝试使用扩展运算符将消息添加到数组中,我已经无数次使用它来将对象添加到数组中(但从未在 useEffect 中使用)。

如果我取消注释行的注释,“聊天”将按其应有的方式更新,但我无法理解为什么扩展运算符不起作用,我需要使用 useRef 来使其工作。我不想为每个相应的 useState 提供大量的 useRef (至少不知道为什么有必要)

任何人都可以看到我做错了什么,或者解释为什么我需要 useRef 吗?

const [chat, setChat ] = useState([]);

//const latestChat = useRef(null);
//latestChat.current = chat;

// ...

useEffect(() => {
    if (connection) {
        connection.start()
            .then(result => {
                console.log('Connected!');

                connection.on('ReceiveMessage', message => {
                    const newMsg = {
                        user: message.user,
                        message:message.message
                    }
                    setChat([...chat, newMsg]); // issue with this line. chat is always empty

                    //const updatedChat = [...latestChat.current];
                    //updatedChat.push(message);
                    //setChat(updatedChat);
                    
                    
                });
            })
            .catch(e => console.log('Connection …
Run Code Online (Sandbox Code Playgroud)

reactjs react-hooks use-effect

3
推荐指数
1
解决办法
4196
查看次数

返回字节数组的 ASP.NET LDAP SearchResults 属性

我正在使用 DirectorySearcher 尝试获取 AD 中的用户列表以将它们与我的应用程序同步,并已从各种 SO 源复制代码,但是我没有获得任何属性值。我正在使用以下代码:

        DirectorySearcher search = new DirectorySearcher();
        SearchResultCollection results = null;
        string sDefaultOU = "LDAP://...";
        DirectoryEntry de = new DirectoryEntry(sDefaultOU);
        string userName = "DonaldDuck";
        search = new DirectorySearcher
        {
            SearchRoot = de,
            PropertiesToLoad = { "displayname", "sAMAccountName"}, 
            Filter = "(sAMAccountName=" + userName + ")"    
        };
        results = search.FindAll();

        foreach (SearchResult result in results)
        {
            String name; 
            if (result.Properties["sAMAccountName"].Count > 0)
            {
                name = result.Properties["sAMAccountName"][0].ToString();
            }    
        }
Run Code Online (Sandbox Code Playgroud)

但是,name 不是等于“DonaldDuck”,而是“Byte[10]”或 Byte[x],其中 x 是长度。

谁能看到我做错了什么。

如果我添加一个过滤器,它会返回一个用户,所以我很确定代码在搜索方面是有效的

c# asp.net ldap active-directory

1
推荐指数
1
解决办法
1588
查看次数