小编Rob*_*ite的帖子

Code First实体框架和外键

想象一下,我有一个由代码创建的数据库,看起来像这样.

Movie (table)
ID int PK
MoveiName nvarchar(100)

Actor (table)
ID int PK
ActorName nvarchar(100)
Movie_ID int FK
Run Code Online (Sandbox Code Playgroud)

这些是我会使用的模型,显然不完全是这样,但你会明白我的观点.

class Movie
{  
    int ID{get;set;}
    string MovieName {get;set;}
    List<Actor> Actors {get;set}
}

class Actor
{
    int ID{get;set}
    string Actorname{get;set}
    Movie Movie{get;set;}
    int Move_ID{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

数据库首先使我能够从一个actor查询电影,但也允许我设置actor的forgien键属性来更新数据库.我不能在代码中首先执行此操作,因为外键在模型中不仅仅是对象.我不想获取Movie对象并设置属性,如果我知道我的电影的ID我宁愿只设置外键而没有调用来获取电影.

合理?大声笑

我想使用codefirst和实体迁移,但我想要与数据库相同的能力首先在对象上设置外键.

干杯的帮助:-D

c# database entity-framework

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

有没有办法通过具有不同排序量的 IQueryable 进行排序

例如,我想尝试这样的事情。排序部分可能没有、1 个或多个按不同顺序排序的列。但我无法使用该ThenBy方法,因为它仅在OrderBy. 下面的代码将不断将顺序重置为排序列表中的最后一项。我也不想更改方法签名。非常感谢您的帮助,谢谢。

public IQueryable<Person> FilterList(string forename, List<Sorting> sorting)
{
    IQueryable<Person> query = dc.Set<Person>();

    if(!string.IsNullOrEmpty(forename)){
        query = query.Where(w=>w.Forename.Contains(forename));

    foreach(var sort in sorting)
    {
        switch(sort.By)
        {
            case "asc":
               switch(sort.Sort)
               {
                   case "forename":
                       query = query.OrderBy(o=>o.Forename);
                       break;

                   case "surname":
                       query = query.OrderBy(o=>o.Surname);
                       break;
               }
               break;

            case "desc":
               switch(sort.Sort)
               {
                   case "forename":
                       query = query.OrderByDescending(o=>o.Forename);
                       break;

                   case "surname":
                       query = query.OrderByDescending(o=>o.Surname);
                       break;
               }
               break;
        }
    }

    return query;
}

public class Sorting
{
    public string Sort{get;set;}
    public string By{get;set;} …
Run Code Online (Sandbox Code Playgroud)

c# linq entity-framework sql-order-by

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

在实现的抽象类中转换泛型类型

我想用一个采用泛型类型的抽象方法创建一个抽象类.我的实现类方法将使用该类型执行某些操作,但因为它的通用我无法访问方法中传递的真实对象的属性.如果我尝试进行转换,那么它将无法编译,因为您无法转换为T类型.我的意思的一个例子.

public abstract class TestAbstractClass
{
    public abstract void Method<T>(ref IQueryable<T> query);
}

public class TestA:TestAbstractClass
{
   // T in this class is an object with a property called Forename
   public override void Method<T>(ref IQueryable<T> query)
   {
       query = query.OrderBy(o=>o.Forename); // unaware of property forename
       query = ((IQueryable<Person>)query).OrderBy(o=>o.Forename); // breaks because of casting
   }
}

public class TestB:TestAbstractClass
{
   // T in this class is an object with a property called HandSize
   public override void Method<T>(ref IQueryable<T> query)
   {
       query …
Run Code Online (Sandbox Code Playgroud)

c# generics abstract-class casting

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