如何从Linq-To-Sql映射中排除成员?

sha*_*oth 12 .net c# linq linq-to-sql

我有这门课:

public class MyClass {
    [Column(Name="StoredColumn", DbType="int")]
    public int Stored;

    public int ForDisplay {
       get { return Stored * 1000; }
    }
}
Run Code Online (Sandbox Code Playgroud)

关键是ForDisplay不要存储在数据库中 - 我只是需要它来获得更方便的代码.

我尝试运行一个返回行集的SQL查询并获取InvalidOperationException:

无法为成员'ForDisplay'指定值.它没有定义一个setter.

我不想ForDisplay被Linq-To-Sql所感动.怎么告诉Ling-To-Sql不接触它?

afr*_*hke 7

你不需要告诉Linq它不应该触及"ForDisplay"属性.通常,未使用该Column属性专门标记的所有属性都将被视为应用程序逻辑的临时部分,并且不会保留或从数据库中检索.

但是,如果您想通过存储过程从数据库中检索某些记录GetMyClasses,那么设计人员将创建一个新类GetMyClassesResult.如果查看生成的代码,则会注意到该类未使用该Table属性进行修饰.在这种情况下,映射器假定必须分配每个属性.如果查询中存在没有相应值的属性,则映射器将尝试将该属性设置为default(T),但由于没有setter,因此将抛出异常.

无论如何,简而言之,只需添加

[Table]
public class MyClass
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

你的班级应该解决这个问题.